我只是在玩弄一个想法,我想不出一种在后台解决这个问题的方法,而不会出现令人畏惧的安全问题。
假设我想让用户有机会通过webservice创建简单的算法,并在小列表上测试这些算法,例如range(0, 5)然后通过另一个webservice、模板或电子邮件报告结果,这并不重要,困扰我的是评估。
使用python:
class Algorithm(whatever):
function = whatever.CharField(max_length=75)用户可以输入如下内容:
'f(x)=x+(x/5)**0.75'当然,我可以使用eval,去掉"x“以外的任何内置字符串,但这可能仍然是一种不幸的做法。
我唯一能想到的就是将任何评估功能移到JavaScript前端。
发布于 2012-12-03 16:54:59
eval()是邪恶的,在后端这样做是非常危险的。但是,可以使用python沙箱安全地完成这一任务。但是如果沙箱在哪里失败,你就会被拥有。这并不是一种非常“深度防御”的方法。
一个更好的方法是评估客户端的有效载荷.然而,这是跨站点脚本(XSS)。防止攻击者利用此问题的一种方法是在客户端设置一个事件处理程序,在按下按钮时对表单进行评估。如果攻击者能够构建一个执行JavaScript的GET或POST请求,那么他就可以利用XSS漏洞。还要确保设置x-frame-options: deny以防止敲击。
https://stackoverflow.com/questions/13674761
复制相似问题