Javascript 处理responseText时,eval和window.json.parse之间有什么区别?

Javascript 处理responseText时,eval和window.json.parse之间有什么区别?,javascript,responsetext,Javascript,Responsetext,我手头有以下代码 var finalCompleteData=eval(“+jsonresponse.responseText+”) 当我使用它时,我在Fortify中收到一个安全漏洞错误,说它可能导致Javascript攻击。所以,我把它改成了 var finalCompleteData=window.json.parse(jsonresponse.responseText) 为此,Fortify没有显示错误。window.json.parse方法做什么 你能解释一下吗。提前感谢:-)eval

我手头有以下代码

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

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

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

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


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

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


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

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

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

var jsObject = eval("alert('blah')");
您实际上信任来自给定源的任何输入,这通常是不安全的。恶意用户可以利用eval执行有害的JavaScript

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

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

因此,它不会像
eval
那样执行任何给定的操作。

非常感谢您的回答。。实际上,我想减少代码中出现非JSON的可能性。。因此,考虑使用$.parseJSON而不是window.json.parse。可以吗?