用于处理responseText的eval和window.json.parse之间的区别?

时间:2011-05-11 13:23:31

标签: javascript responsetext

我手头有以下代码

var finalCompleteData = eval(“(”+ jsonresponse.responseText +“)”);

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

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

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

你能解释一下吗?在此先感谢: - )

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

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

答案 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的方式执行任何事情。