我尝试谷歌搜索但没有得到一个非常具体的答案..然后,我可能没有使用正确的关键字..有人可以指出javascript eval可能导致的“安全”问题吗?用例子非常好。如果您可以指向同样的现有Web资源,也会这样做。
编辑:我只需要eval的安全隐患。
答案 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(),那么所有可能发生的事情就是你得到了可能已经显示的错误数据,甚至,如果你是一个好学的程序员,也会显示错误信息。特定数据。