【发布时间】:2011-03-31 00:10:28
【问题描述】:
在下面的视频中,时间标记为 21:40,Microsoft PDC 演示者说,重要的是要包装所有 JSON,这样它就不是顶级数组:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
展开的顶级数组有什么风险?
我应该如何检查自己是否易受攻击?我从第三方购买了许多组件,并有开发我的代码的外部供应商。
【问题讨论】:
标签: javascript json security xss
在下面的视频中,时间标记为 21:40,Microsoft PDC 演示者说,重要的是要包装所有 JSON,这样它就不是顶级数组:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
展开的顶级数组有什么风险?
我应该如何检查自己是否易受攻击?我从第三方购买了许多组件,并有开发我的代码的外部供应商。
【问题讨论】:
标签: javascript json security xss
我认为这是因为 Array() 构造函数可以重新定义。然而,这个问题并不是数组所独有的。
我认为攻击(或一种可能的方式)是这样的:
function Array(n) {
var self = this;
setTimeout(function() {
sendToEvilHackers(self);
}, 10);
return this;
}
浏览器(或某些浏览器)将该构造函数用于[n, n, n] 数组表示法。因此,CSRF 攻击可以利用您与银行的开放会话,点击带有 <script> 标记的已知 JSON URL 来获取它,然后 poof 你就拥有了。
【讨论】:
{"d":[1,2,3]} 与返回[1,2,3] 一样容易受到影响。
{ 被解释为代码块,而不是对象字面量。因此,您的 {"d":[1,2,3]} 不是有效的脚本,不会被浏览器执行。试试看吧:)
这是因为几年前 Jeremiah Grossman 发现了一个非常 interesting vulnerability that affects gmail。有些人通过使用unparseable cruft 解决了这个漏洞(bobince 先生在此页面上的技术描述非常棒。)
微软之所以谈论这个是因为他们还没有修补他们的浏览器。 (编辑: Edge 和 IE 10/11 的最新版本已经解决了这个问题。)Mozilla 认为这是 json 规范中的一个漏洞,因此他们在 Firefox 3 中对其进行了修补。郑重声明,我完全同意 Mozilla 的观点,但不幸的是,每个 Web 应用程序开发人员都必须保护自己免受这个非常模糊的漏洞的影响。
【讨论】: