我手头有以下代码
var finalCompleteData = eval(“(”+ jsonresponse.responseText +“)”);
当我使用它时,我在Fortify中收到一个安全漏洞错误,说它可能导致Javascript Hacking。所以,我把它改成了
var finalCompleteData = window.json.parse(jsonresponse.responseText);
为此,Fortify没有显示错误。 window.json.parse方法有什么作用?
你能解释一下吗?在此先感谢: - )
答案 0 :(得分:6)
eval
将执行它应该评估的任何JavaScript代码,并以最高级别的安全性进行评估。这意味着如果您的响应文本返回非json代码,但是有效的javascript,eval
将执行它。天空是这个的极限,它可以添加新功能,更改变量,重定向页面。
使用window.json.parse
只会评估json,因此输入流氓代码的风险要小得多。
答案 1 :(得分:1)
答案 2 :(得分:1)
正如其他人所提到的,eval
将执行任何有效的JavaScript代码。因此,以下内容会引发警报:
var jsObject = eval("alert('blah')");
您基本上信任来自给定来源的任何输入,这通常是不安全的。恶意用户可以利用eval并执行有害的JavaScript。
但是, JSON.parse
只有在传入的字符串是有效的JSON:
// gives "SyntaxError: JSON.parse"
var jsObject = JSON.parse("alert('blah')");
因此它没有按照eval
的方式执行任何事情。