Javascript 使用jQuery获取JSON数据安全吗?

Javascript 使用jQuery获取JSON数据安全吗?,javascript,jquery,security,Javascript,Jquery,Security,JSON允许您从AJAX调用中删除。例如: $.get(sourceUrl, data, callBack, 'json'); 可用于从sourceUrl获取和解析JSON代码 JSON是用于描述数据的简单JavaScript代码。JavaScript解释器可以对此进行评估,以获取数据结构 评估来自远程源的代码通常是个坏主意。我知道JSON规范并不特别允许函数声明,但没有理由不在代码中包含函数声明,让不安全和幼稚的使用者编译/执行代码 jQuery如何处理解析?它评估这个代码吗?有什么保护措施

JSON允许您从AJAX调用中删除。例如:

$.get(sourceUrl, data, callBack, 'json');
可用于从
sourceUrl
获取和解析JSON代码

JSON是用于描述数据的简单JavaScript代码。JavaScript解释器可以对此进行评估,以获取数据结构

评估来自远程源的代码通常是个坏主意。我知道JSON规范并不特别允许函数声明,但没有理由不在代码中包含函数声明,让不安全和幼稚的使用者编译/执行代码


jQuery如何处理解析?它评估这个代码吗?有什么保护措施可以防止有人入侵
sourceUrl
和传播恶意代码?

我所知道的所有浏览器都通过Ajax禁用跨站点请求。也就是说,如果您的页面位于my.example.com上,则不能使用Ajax加载任何内容,除非其URL也位于my.example.com上

这实际上可能是一件麻烦事,攻击者可以通过其他方式注入源代码,但表面上这一限制正是为了解决您提到的问题。

$。getJSON()
用于执行(而不是使用
eval
)远程源代码(如果指定了回调,则使用JSONP惯用法)。使用此方法时,完全取决于您是否信任源,因为他们将控制您的整个页面(他们甚至可以发送cookie)

关于脚本标记黑客(jsonp)的网站:

因此脚本可以访问和使用 它的cookies。它可以访问 使用用户的 授权。它可以检查DOM 和JavaScript全局对象,以及 把它找到的任何信息发送到任何地方 在世界上,脚本标签黑客是 不安全,应避免

我上一次查看(2008年末)JQuery函数get()getJSON()etc内部评估JSon字符串,因此与评估面临相同的安全问题

因此,在以任何形式使用eval()之前,最好使用一个解析函数来验证JSON字符串,以确保它不包含任何不可靠的非JSON javascript代码

您可以在中找到这样的函数

有关此区域的详细讨论,请参阅

总之,使用JQuery的JSON函数而不解析输入JSON(使用上述链接函数或类似函数)不是100%安全的

注意:如果getJSON中仍然缺少这种解析(可能是最近添加的),那么从JQuery参考文档中了解跨域功能带来的这种风险就更加重要了:

从jQuery1.2开始,您可以加载JSON 位于另一个域上的数据,如果 指定一个JSONP回调,该回调可以是 这样做:“myurl?回调=?”。 jQuery自动替换? 使用要调用的正确方法名称, 调用指定的回调函数

和都具有本机JSON支持,这将为eval()提供一个安全的替代方案。我希望其他浏览器也会这样做。我也希望jQuery将其实现更改为使用这些本机方法。

我认为oyu现在应该使用这些方法——我不确定json2中发生的确切更新,但我知道它将避免意外重写JSON API的本机浏览器实现(可能是原始版本没有阻止这一点?)我不明白为什么“使用jQuery.getJSON()时更重要”。两种方法都在执行javascript代码,而且两种方法都必须经过清理。当使用getJSON()进行回调时,它通常来自另一个域,因此您无法控制JSON的清理。