评估用户文本。有什么风险?

时间:2010-08-13 12:25:58

标签: javascript security

我有一个带有文本字段的html页面,供用户放置如下表达式:

(x+23)*2
((x-y)*(x+y))
x*2/z+y

用户输入它们并使用'eval'方法执行它们。 在调用eval之前,我会检查没有任何狡猾的东西(比如尝试定义函数或类似函数)。

在我看来,我应该没事。 但是我引入了一个安全漏洞,因为我在用户的字符串上调用'eval'。 有什么风险?

7 个答案:

答案 0 :(得分:1)

客户端可以借助浏览器插件和javascript调试工具在其客户端上调用javascript。 如果你试图在服务器上运行用户定义的代码,那将是另一回事,这将是非常危险的。

答案 1 :(得分:1)

要担心的主要问题是,他们是否可以形成URL并将其发送给某人,然后通过单击URL在另一台计算机上执行eval。如果您的表单使用GET,或者即使您在评估表单时没有区分GET / POST,也可以这样做。

您还可以采取其他措施来更加确定。

答案 2 :(得分:1)

如果您只是在该页面上为该用户评估用户代码,那么您就可以了。当用户输入字符串并在其他用户的访问中评估它们时,您开始遇到安全问题。如果你不这样做,那么根本没有安全漏洞。任何人都可以在他们正在访问的页面上评估Javascript,你无法阻止他们。

答案 3 :(得分:0)

用户可以做的就是评估本页范围内的内容。 如果用户输入了可怕的剧本,那除了用户自己以外,除了用户以外,还能做些什么?

用户无法在该字段中进行评估,也无法将其作为书签放在位置栏中 - 所有内容都在客户端浏览器的范围内运行。

答案 4 :(得分:0)

如果碰巧安装了jQuery,如果没有检查,可能会发生这种情况:

$.getScript("test.js");

http://api.jquery.com/jQuery.getScript/

答案 5 :(得分:0)

据推测,您正在过滤用户提供的字符串。然而, 存在一种风险,即有一种偷偷摸摸的方式来实现你忽略的伤害。

答案 6 :(得分:0)

“我检查没有什么狡猾的”是什么意思?将某些关键字列入黑名单不起作用。例如,

eval("func"+"tion () { window.alert('haha'); }()");

正如Lou所说,当您向页面添加功能时,您必须担心。如果您添加一个“共享此”按钮,该按钮会链接到http://example.com/mypage?expr=x-1,那么欺骗毫无戒心的用户点击窃取cookie的链接并不困难。

我很确定你可以在某处找到JavaScript沙盒。