我有一个带有文本字段的html页面,供用户放置如下表达式:
(x+23)*2
((x-y)*(x+y))
x*2/z+y
用户输入它们并使用'eval'方法执行它们。 在调用eval之前,我会检查没有任何狡猾的东西(比如尝试定义函数或类似函数)。
在我看来,我应该没事。 但是我引入了一个安全漏洞,因为我在用户的字符串上调用'eval'。 有什么风险?
答案 0 :(得分:1)
客户端可以借助浏览器插件和javascript调试工具在其客户端上调用javascript。 如果你试图在服务器上运行用户定义的代码,那将是另一回事,这将是非常危险的。
答案 1 :(得分:1)
要担心的主要问题是,他们是否可以形成URL并将其发送给某人,然后通过单击URL在另一台计算机上执行eval。如果您的表单使用GET,或者即使您在评估表单时没有区分GET / POST,也可以这样做。
您还可以采取其他措施来更加确定。
答案 2 :(得分:1)
如果您只是在该页面上为该用户评估用户代码,那么您就可以了。当用户输入字符串并在其他用户的访问中评估它们时,您开始遇到安全问题。如果你不这样做,那么根本没有安全漏洞。任何人都可以在他们正在访问的页面上评估Javascript,你无法阻止他们。
答案 3 :(得分:0)
用户可以做的就是评估本页范围内的内容。 如果用户输入了可怕的剧本,那除了用户自己以外,除了用户以外,还能做些什么?
用户无法在该字段中进行评估,也无法将其作为书签放在位置栏中 - 所有内容都在客户端浏览器的范围内运行。
答案 4 :(得分:0)
答案 5 :(得分:0)
据推测,您正在过滤用户提供的字符串。然而, 存在一种风险,即有一种偷偷摸摸的方式来实现你忽略的伤害。
答案 6 :(得分:0)
“我检查没有什么狡猾的”是什么意思?将某些关键字列入黑名单不起作用。例如,
eval("func"+"tion () { window.alert('haha'); }()");
正如Lou所说,当您向页面添加功能时,您必须担心。如果您添加一个“共享此”按钮,该按钮会链接到http://example.com/mypage?expr=x-1,那么欺骗毫无戒心的用户点击窃取cookie的链接并不困难。
我很确定你可以在某处找到JavaScript沙盒。