什么是“顶级 JSON 数组”? 为什么它们是安全风险?

在下面的视频中,时间标记为21:40,微软 PDC 的主持人说,重要的是要包装所有的 JSON,这样它就不是一个顶级数组:

Https://channel9.msdn.com/events/pdc/pdc09/ft12

解开顶级数组的风险是什么?

我该如何检查自己是否脆弱?我从第三方购买了许多组件,并有外部供应商谁开发我的代码。

38509 次浏览

我认为这是因为 Array ()构造函数可以重新定义。

我认为攻击(或者一种可能的方式)是这样的:

function Array(n) {
var self = this;
setTimeout(function() {
sendToEvilHackers(self);
}, 10);
return this;
}

浏览器(或者一些浏览器)使用这个构造函数来表示 [n, n, n]数组符号。因此,CSRF 攻击可以利用您与银行的开放会话,使用 <script>标记命中一个已知的 JSON URL 来获取它,然后您就拥有了

这是因为几年前 Jeremiah Grossman 发现了一个非常 影响 gmail 的有趣漏洞。有些人通过使用 无法分析的残渣来解决这个漏洞(bobince 先生在这个页面上的技术描述非常棒)

微软之所以谈论这个,是因为他们还没有给浏览器打补丁。(编辑: Edge 和 IE10/11的最新版本已经解决了这个问题。)Mozilla 认为这是 json 规范中的一个漏洞,因此他们在 火狐3中对其进行了修补。声明一下,我完全同意 Mozilla 的观点,不幸的是,每个 web 应用开发者都必须保护自己免受这个非常隐蔽的漏洞的伤害。