我的 Spider Sense 警告我使用eval()
解析传入的 JSON 是一个坏主意。我只是想知道JSON.parse()
- 我认为它是 JavaScript 的一部分而不是特定于浏览器的功能 - 是否更安全。
JSON.parse 与 eval()
IT技术
javascript
json
2021-01-27 09:29:19
6个回答
如果使用eval
:JSON 是 Javascript 的子集,而 json.parse 仅解析 JSON,则您更容易受到攻击,而eval
这会为所有 JS 表达式敞开大门。
所有JSON.parse
实现最有可能使用eval()
JSON.parse
基于Douglas Crockford 的解决方案,该解决方案eval()
就在第 497 行使用。
// 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 语法。
并非所有浏览器都支持原生 JSON,因此有时您需要使用eval()
JSON 字符串。使用来自http://json.org 的JSON 解析器,因为它可以让您更轻松地处理所有事情。
Eval()
是一种邪恶,但对于某些浏览器来说,它是一种必要的邪恶,但是如果您可以避免它,请这样做!!!!!!
JSON.parse() 和 eval() 接受的内容有所不同。尝试评估这个:
var x = "{\"shoppingCartName\":\"shopping_cart:2000\"}"
eval(x) //won't work
JSON.parse(x) //does work
请参阅此示例。
如果您使用 解析 JSON eval
,则您允许解析的字符串包含绝对任何内容,因此您可能会发现自己正在执行函数调用或其他任何内容,而不仅仅是一组数据。
此外,JSONparse
接受一个附加参数,reviver,它允许您指定如何处理某些值,例如日期时间(更多信息和示例在此处的内联文档中)