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()
是一个邪恶的东西,但是对一些浏览器来说它是一个必要的邪恶,但是你可以避开它,这样做!!!!!
如果你用eval
parsingJSON,你可以让被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子集。