JSON.parse与eval()

我的Spider Sense警告说使用eval()来parsing传入的JSON是一个坏主意。 我只是想知道如果JSON.parse() – 我认为是JavaScript的一部分,而不是一个浏览器特定的function – 是更安全的。

如果使用eval 则更容易受到攻击 :JSON是Javascript的一个子集,json.parse只是parsingJSON,而eval会让所有JSexpression式都开放。

所有JSON.parse实现最有可能使用eval()

JSON.parse基于道格拉斯·克罗克福德(Douglas Crockford)的解决scheme ,该解决scheme在497行上使用eval()

 // In the third stage we use the eval function to compile the text into a // JavaScript structure. The '{' operator is subject to a syntactic ambiguity // in JavaScript: it can begin a block or an object literal. We wrap the text // in parens to eliminate the ambiguity. j = eval('(' + text + ')'); 

JSON.parse的优点是validation参数是否是正确的JSON语法。

并非所有的浏览器都支持本地JSON,所以有时候需要使用eval()来处理JSONstring。 使用来自http://json.org的; JSONparsing器,因为它可以为你处理所有事情。

Eval()是一个邪恶的东西,但是对一些浏览器来说它是一个必要的邪恶,但是你可以避开它,这样做!!!!!

如果你用evalparsingJSON,你可以让被parsing的string包含绝对的东西,所以你可以发现自己正在执行函数调用,而不是一组数据。

此外,JSON的parse接受一个aditional参数reviver,让你指定如何处理某些值,如datetimes(更多信息和示例在这里的内联文档)

JSON.parse()和eval()会接受什么不同。 尝试在此评估:

var x =“{\”shoppingCartName \“:\”shopping_cart:2000 \“}”

 eval(x) //won't work JSON.parse(x) //does work 

看到这个例子 。

JSON只是JavaScript的一个子集。 但是, eval评估完整的JavaScript语言,而不仅仅是JSON子集。