【问题标题】:Safe json parsing with jquery?使用 jquery 进行安全的 json 解析?
【发布时间】:2010-06-11 00:41:25
【问题描述】:

我正在使用带有 json 的 jquery。我的客户端页面生成 json,我将其存储在我的服务器上。然后,客户端可以稍后将 json 取回,解析并显示它。

由于我的客户正在生成 json,它可能不安全。我认为 jquery 在内部使用 eval() 。真的吗?有没有办法从可用的浏览器中使用本机 json 解析器,否则如果没有,则退回到手动解析?我是 jquery 的新手,所以我不知道在哪里插入我自己的解析代码。我正在做类似的事情:

$.ajax({
    url: 'myservlet',
    type: 'GET',
    dataType: 'json',
    timeout: 1000,
    error: function(){
        alert('Error loading JSON');
    },
    success: function(json){
        alert("It worked!: " + json.name + ", " + json.grade);
    }
});

所以在success() 方法中,json 对象已经为我解析好了。有没有办法先将它作为原始字符串捕获?然后我可以决定是使用本机解析器还是手动解析(希望有一个 jquery 插件)。

我看的文章都是不同年份的,不知道jquery是不是已经放弃eval()换成json了,

谢谢

【问题讨论】:

    标签: jquery


    【解决方案1】:

    最新版本有jQuery.parseJSON。它将在拥有它的浏览器中使用本机 JSON。对于较旧的,它将进行正则表达式完整性检查,然后使用 new Function() (基本上是 eval)。

    由于您指定 'json' 作为 dataType,它将在此处使用 parseJSON。这是在内部httpData function 中处理的

    【讨论】:

    • 但是如果浏览器不支持它,那么它会回退到使用 eval() 吗?如果是这样,我会让我的用户面临风险吗?谢谢
    • 如果原生 JSON 不可用,它确实使用 new Function(基本上是 eval),但只有在使用来自 JSON.org 的正则表达式对其进行完整性检查之后(参见 json.org/json2.js)。这应该防止脚本注入。
    • 啊,太好了。但是我们如何在上面的 $.ajax({}) 示例中使用 jQuery.parseJSON() 呢?到函数返回的时候,响应已经被jQuery解析了,对吧?
    • 最新的 jQuery 将在内部使用 parseJSON。 .
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多