评估来自“不受信任”用户的算法

时间:2012-12-02 22:45:28

标签: python security web-applications eval

我只是想着一个想法,我想不出办法在后端解决这个问题,而不会出现严重的安全问题。

假设我想让用户有机会通过网络服务创建简单的算法,并通过小型列表测试这些算法,例如: range(0, 5)然后通过另一个网络服务,模板或电子邮件回报结果,这并不重要,这是困扰我的评估。

使用python:

class Algorithm(whatever):
    function = whatever.CharField(max_length=75)

用户可能会输入以下内容:

'f(x)=x+(x/5)**0.75'

当然我可以使用eval,剥离任何内置插件,“x”以外的字符串等,但这仍然可能是不幸的做法。

我唯一能想到的就是将任何评估功能移到JavaScript前端。

1 个答案:

答案 0 :(得分:3)

eval()是邪恶的,在后端执行此操作非常危险。但是,可以使用python sandbox安全地完成。但如果沙箱哪里失败,你就会被拥有。这不是一种非常“深度防御”的方法。

更好的方法是评估客户端的有效负载......但这是跨站点脚本(XSS)。防止攻击者利用此问题的一种方法是在客户端使用事件处理程序,在按下按钮时评估表单。如果攻击者可以构建执行JavaScript的GET或POST请求,那么他可以利用XSS漏洞。另外,请务必设置x-frame-options: deny以阻止clickjacking

相关问题