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