用于解析 JSON 的 JavaScript eval() 替代方案
-
09-09-2019 - |
题
快速提问。JavaScript 中的 Eval 不安全,不是吗?我有一个字符串形式的 JSON 对象,我需要将其转换为实际对象,以便获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
如果有帮助的话,我正在使用 jQuery 的 $.ajax 方法。
谢谢
解决方案
好了,安全与否,当你使用jQuery,你最好使用 $ .getJSON()方法,而不是$就():
$.getJSON(url, function(data){
alert(data.exampleType);
});
eval()
通常被认为是JSON解析安全的,当你只用自己的服务器和通信尤其是当你使用服务器端的一个很好的JSON库,生成JSON将不包含任何讨厌的保证。
即使道格拉斯Crockford的,JSON的作者,他说,你不应该在你的代码的任何地方使用eval()
,除了解析JSON。看到他的书的 JavaScript的:好的部件
其他提示
如果你不能信任的来源,那么你是正确的... EVAL是不安全的。它可以用来将代码注入到您的网页。
查看此链接,更安全的替代:
在页解释了为什么EVAL是不安全的,并在页面底部提供了一个链接到一个JSON解析器。
不安全?这取决于你是否能信任的数据。
如果您可以相信的是,字符串将是JSON(并且将不包括,例如,函数),那么它是安全的。
这是说 - 如果你正在使用jQuery,你为什么要手工做这个?使用的dataType 选项来指定,它是JSON,让图书馆照顾它。
如果你正在使用jQuery,作为1.4.1版本可以使用jQuery.parseJSON()
看到这个答案:安全的json与jQuery解析
使用JavaScript的eval
是不安全的。由于JSON只是JavaScript,但JavaScript的eval
的子集,允许任何有效的JavaScript。
这json.org 代替使用一个真实的JSON解析器像 JSON解析器。
要评估的代码另一种方法是手动解析它。这不是很难,因为它的声音,但它在运行时重了不少。 你可以阅读在这里。
重要的部分要注意的是评估JSON不具有固有的不安全的。只要你信任的来源不是球的事情了。这包括确保东西传递到JSON编码器的正确转义(停止人2步执行了你的用户的机器码流)。
您可以尝试像这样
var object = new Function("return " + jsonString)()
另一个重要方法是锐: http://yuilibrary.com/yui/docs/json/
所以,你的代码将是这样的:
Y.JSON.parse('{"id": 15, "name": "something"}');