我最近开始研究使用.NET MVC构建Web应用程序,我偶然发现了Phil Haack的这篇博文:JSON Hijacking.对于那些在使用JSON传输敏感数据时不了解此漏洞的人来说,这是必须阅读的.
似乎有三种方法可以处理此漏洞.
第三种选择并不是真正的选择,因为它确实限制了JSON的使用.
那么你更喜欢其他两个中的哪一个?
默认情况下,.NET MVC 2预览需要POST for JSON响应,我认为这是保护尚未了解此问题的任何开发人员的好方法.但对我而言,以这种方式打破REST感觉有点"hacky".除非有人用我说话,否则我会坚持将我的数组包装在另一个对象中并将其展开到客户端.
我亲自将我的所有回复包括在评论中:
/* {
"foo": 3,
"bar": "string with *\x2F sequence in"
} */
Run Code Online (Sandbox Code Playgroud)
并在JSON.parsing之前将其删除.这使得它无法用作脚本标记的目标.
值得注意的是,这个问题不仅与JSON有关,而且与您提供的任何可以解释为JavaScript的HTTP响应有关.即使是一个.htaccess保护的文本文件也很容易通过第三方脚本标记包含泄漏,如果它的格式恰好是有效的JavaScript.
这就是危机:感谢E4X,即使是普通的静态XML文档也是有效的JavaScript.E4X是一个灾难性的,无用的JavaScript扩展,在Mozilla上实现和发明,它允许你<element>content</element>在JS中内联编写XML文字; 因此,受保护的XML文件现在容易受到与JSON相同的跨站点泄漏风险的影响.谢谢Mozilla.请参阅Google doctype的相关文章.