Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 评估用户文本。什么';风险在哪里?_Javascript_Security - Fatal编程技术网

Javascript 评估用户文本。什么';风险在哪里?

Javascript 评估用户文本。什么';风险在哪里?,javascript,security,Javascript,Security,我有一个带有文本字段的html页面,用户可以将以下表达式放入其中: (x+23)*2 ((x-y)*(x+y)) x*2/z+y 用户输入它们,我使用“eval”方法执行它们。 在调用eval之前,我要检查一下是否有任何不可靠的地方(比如试图定义一个函数或类似的东西) 在我看来,我应该很好。 但我引入了一个安全漏洞,因为我在用户的字符串上调用'eval'。 风险是什么?用户所能做的就是评估本页面范围内的内容。 如果用户输入了可怕的脚本,除了用户自己,它还能对任何人做什么 在该字段中,用户可以评

我有一个带有文本字段的html页面,用户可以将以下表达式放入其中:

(x+23)*2
((x-y)*(x+y))
x*2/z+y
用户输入它们,我使用“eval”方法执行它们。 在调用eval之前,我要检查一下是否有任何不可靠的地方(比如试图定义一个函数或类似的东西)

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

用户所能做的就是评估本页面范围内的内容。 如果用户输入了可怕的脚本,除了用户自己,它还能对任何人做什么


在该字段中,用户可以评估的内容中没有任何内容不能作为bookmarklet放在位置栏中-所有内容都在客户端浏览器的范围内运行。

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

如果您碰巧安装了jQuery,如果不选中,可能会发生以下情况:

$.getScript("test.js");

您可能正在过滤用户提供的字符串。然而,存在一种风险,即有一种偷偷摸摸的方式来造成你所忽视的伤害。

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


您还可以做其他事情来更加确定。

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

你说的“我检查一下没有什么不可靠的东西”是什么意思?将某些关键字列入黑名单不起作用。比如说,

eval("func"+"tion () { window.alert('haha'); }()");
正如Lou所说,当您向页面添加功能时,您必须担心。如果您添加了一个“共享此”按钮来创建指向的链接,就不难欺骗一个毫无戒心的用户单击一个窃取cookie的链接


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

与javscript相同:从barand的位置找到void($.getScript(“test.js”)),那又怎样?发生了什么?就像用户将其粘贴到您的文本区域并对其进行评估一样。jQuery将加载ScriptNoIssue。但是如果它被保存到服务器上,那么你需要小心,它永远不会被发送到其他人的浏览器(例如“流行表达式”页面)。你没有表明你在这么做,所以它本身就足够安全了,像什么?假设我让任何狡猾的脚本。。。那又怎样?服务器端什么都没有。我只是在评估他的文本字段。有什么风险吗?正如我所说,用户无论如何都可以在他的机器上做任何事情,所以你不会增加额外的风险。你说:任何人都可以在他们访问的页面上评估Javascript,你不能阻止他们。你是什么意思?javascript:window.alert(document.location)对不起,我听不懂。那是什么?它是一个书签。将其粘贴到位置栏中,脚本将在您的网页范围内执行,除非您将代码发送到其他地方,或者其他人可以向您的网页提供url,其中url中的代码为eval'd,那么我在这里一点也不担心。例如,只要您将代码保存在带有示例的网页上,代码就可以在下一个加载页面的人的浏览器上执行。