4

我手头有以下代码

var finalCompleteData = eval("("+jsonresponse.responseText+")");

当我使用它时,我在 Fortify 中收到一个安全漏洞错误,说它可能导致 Javascript Hacking。所以,我把它改成

var finalCompleteData = window.json.parse(jsonresponse.responseText);

为此,Fortify 没有显示错误。window.json.parse 方法是做什么的?

你能解释一下吗。提前致谢 :-)

4

3 回答 3

6

eval将执行它应该评估的任何 JavaScript 代码,并且它以最高级别的安全性进行评估。这意味着如果您的响应文本返回非 json 代码但有效的 javascript,eval则将执行它。天空是极限,它可以添加新功能,更改变量,重定向页面。

只评估 json,因此window.json.parse输入流氓代码的风险要小得多。

于 2011-05-11T13:27:08.253 回答
1

eval 能够运行任何类型的 javascript 代码 - 不仅仅是 JSON.parse 那样的简单对象/数组(它检查内容 - 验证 json)。因此,在无法保证输入的地方应避免使用 eval。

于 2011-05-11T13:27:29.720 回答
1

正如其他人所提到的,eval将执行任何有效的 JavaScript 代码。因此,以下将导致警报:

var jsObject = eval("alert('blah')");

您基本上信任来​​自给定来源的任何输入,这通常是不安全的。恶意用户可以利用 eval 并执行有害的 JavaScript。

JSON.parse但是,只有传入的字符串是有效的 JSON 时才会成功返回:

// gives "SyntaxError: JSON.parse"
var jsObject = JSON.parse("alert('blah')");

因此,它不只是执行它所提供的任何东西eval

于 2011-05-11T13:32:17.230 回答