javascript eval可以带来什么问题

时间:2010-08-31 09:05:50

标签: javascript eval

我尝试谷歌搜索但没有得到一个非常具体的答案..然后,我可能没有使用正确的关键字..有人可以指出javascript eval可能导致的“安全”问题吗?用例子非常好。如果您可以指向同样的现有Web资源,也会这样做。

编辑:我只需要eval的安全隐患。

4 个答案:

答案 0 :(得分:2)

eval()可能是设计不佳的标志。例如,有时人们使用它来访问对象属性,因为他们不知道你可以使用[]表示法,即eval('obj。'+ prop_name)。如果您使用eval()用户内容,它也是XSS漏洞的来源,因为它可能被解释为JS。它也往往比替代品慢。

这是使用eval()解析JSON时最基本的XSS示例:

eval({"a": "b", 'c': "d" + alert("xss") + ""})

要获得这样的洞,你必须对构建你的JSON而不是逃避引号很懒惰,但是有更复杂的例子,并且使用像Douglas Crockford(json.org)这样的专门库可以避免它

答案 1 :(得分:1)

一般来说,几乎总有一种替代方法:

  • 更快
  • 更易于阅读
  • 如果出错,更容易调试
  • 打破意外用户输入的可能性较低

答案 2 :(得分:1)

性能

eval函数将字符串解析为代码,这比访问属性要多得多。

考虑eval('myForm.'+field+'.value')myForm[field].value相比的影响。

结构

几乎总是在使用eval函数时,有一种更为结构化的方法。避免使用eval功能可以让您找到解决问题的更好方法。

与使用像eval('myVars'+i)这样的数组相比,考虑使用动态变量名称(如myArray[i])的效果。

答案 3 :(得分:0)

安全隐患是如果eval()的参数是从某些第三方(用户输入,Web服务等)获取的,那么您可能正在运行某些代码,这些代码可能会执行您不期望的操作。

为什么这很重要? 想象一下,您正在使用一些第三方Web服务来丰富您的用户体验,也许从Facebook获取信息,并且该Web服务被黑客入侵。现在黑客可以在你的页面上执行javascript代码,因为你eval()来自web服务的一些结果,使得黑客能够在你的DOM中注入任何东西,用木马等感染你的用户。

现在,如果你没有使用eval(),那么所有可能发生的事情就是你得到了可能已经显示的错误数据,甚至,如果你是一个好学的程序员,也会显示错误信息。特定数据。