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