My Spider Sense警告我,使用eval()
解析传入的JSON是一个坏主意。我只是想知道JSON.parse()
- 我认为它是JavaScript的一部分而不是特定于浏览器的功能 - 是否更安全。
答案 0 :(得分:107)
如果使用eval
,则您更容易受到攻击:JSON是Javascript的子集,json.parse只解析JSON,而eval
会对所有人开放JS表达式。
答案 1 :(得分:35)
所有JSON.parse
实施最有可能使用eval()
JSON.parse
基于Douglas Crockford's solution,line 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
的优点是它验证了参数是正确的JSON语法。
答案 2 :(得分:14)
并非所有浏览器都支持本机JSON,因此有时您需要将eval()
用于JSON字符串。使用http://json.org中的JSON解析器,因为它可以更轻松地处理所有事情。
Eval()
是一种邪恶,但是对某些浏览器而言它是一种必要的邪恶,但你可以避免它,这样做!!!!!
答案 3 :(得分:10)
JSON.parse()和eval()之间存在差异。试试eval:
var x =“{\”shoppingCartName \“:\”shopping_cart:2000 \“}”
eval(x) //won't work
JSON.parse(x) //does work
请参阅此example。
答案 4 :(得分:9)
如果使用eval
解析JSON,则允许解析的字符串绝对包含任何内容,因此您可能会发现自己正在执行函数调用,或者其他任何内容,而不仅仅是一组数据。
此外,JSON的parse
接受一个aditional参数reviver,它允许您指定如何处理某些值,例如日期时间(内联文档here中的更多信息和示例)
答案 5 :(得分:4)
JSON只是JavaScript的一个子集。但eval
评估完整的JavaScript语言,而不仅仅是JSON的子集。