一尘不染

什么是“顶级JSON数组”,为什么会有安全风险?

javascript

在下面的视频中,Microsoft PDC演示者在时间标记21:40处说,包装所有JSON以使其不是顶级数组很重要:

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

解开顶层阵列的风险是什么?

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


阅读 312

收藏
2020-05-01

共2个答案

一尘不染

微软之所以这样说,是因为他们尚未修补浏览器。(编辑:Edge和IE10/11的最新版本已解决了该问题。)Mozilla认为这是json规范中的漏洞,因此他们在Firefox3中对其进行了修补。作为记录,我完全同意Mozilla,它的不幸之处在于,但每个Web应用程序开发人员都必须自我保护,以免受这种非常晦涩的漏洞的影响。

2020-05-01
一尘不染

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

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

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

浏览器(或某些浏览器)使用该构造函数来[n, n, n]表示数组。因此,CSRF攻击可以利用您与银行的公开会话,用<script>标签访问已知的JSON URL 进行提取,然后欺骗您的所有权。

2020-05-08