JSON允许您从AJAX调用中检索多种格式的数据.例如:
$.get(sourceUrl, data, callBack, 'json');
可用于从中获取和解析JSON代码sourceUrl
.
JSON是用于描述数据的简单JavaScript代码.这可以通过JavaScript解释器来回避,以获得数据结构.
从远程来源评估代码通常是个坏主意.我知道JSON规范并没有特别允许函数声明,但是没有理由你不能在代码中包含一个并且有一个不安全和天真的消费者编译/执行代码.
jQuery如何处理解析?它评估此代码吗?有哪些保护措施可以阻止某人进行黑客攻击sourceUrl
和分发恶意代码?
我最后一次看到(2008年末)JQuery函数get()getJSON()等内部eval JSon字符串,因此暴露于与eval相同的安全问题.
因此,在使用任何形式的eval()之前,使用验证JSON字符串以确保它不包含任何狡猾的非JSON javascript代码的解析函数是一个非常好的主意.
您可以在https://github.com/douglascrockford/JSON-js/blob/master/json2.js找到这样的功能.
有关此领域的详细讨论,请参阅JSON和Broswer Security.
总之,使用JQuery的JSON函数而不解析输入JSON(使用上面的链接函数或类似函数)并不是100%安全.
注意:如果getJSON中仍然缺少这种解析(最近可能已经添加),那么从JQuery参考文档中了解由于跨域功能而导致的风险更为重要:
从jQuery 1.2开始,如果指定了JSONP回调,则可以加载位于另一个域的JSON数据,这可以这样做:"myurl?callback =?".jQuery自动替换?使用正确的方法名称来调用,调用指定的回调.