原创转载请注明出处:http://agilestyle.iteye.com/blog/2367009
Issue
JSON劫持利用一些浏览器的功能,允许脚本覆盖核心语言的对象setter的例程,它允许恶意JavaScript插入逻辑,使其监控服务器返回的JSON消息。
在一个JSON劫持攻击中,攻击者将覆盖的JavaScript数组传递给它的构造函数来窃取信息。攻击者然后嵌入域被劫持的JSON端点在HTML脚本标记。浏览器将把跨域资源作为一个JavaScript文件和试图呈现,导致调用数组构造函数的攻击者的版本,导致跨领域的信息暴露。
Solution
为了防止JSON劫持:
- 使用application/json MIME类型返回json响应。(避免使用text/html)
- 不要使用数组作为最高级别的JSON数据传输结构。使用JSON Object替代。例如,如果您需要返回[1,2,3,4,5],返回 '{"result":[1,2,3,4,5]}'
- 如果你的客户端库允许它(例如Dojo),使用评论过滤JSON格式和使用mime类型text/json-comment-filtered。例如:[1,2,3,4,5] 的json返回被转换为 '/*[1,2,3,4,5]*/' 这种形式
Reference
http://cwe.mitre.org/data/definitions/352
https://dojotoolkit.org/reference-guide/1.10/dojo/contentHandlers.html