什么是“顶级JSON数组”,为什么他们是安全风险?
在下面的video中,在时间标记21:40,微软PDC发言人说,重要的是所有的JSON被包装,所以它不是一个顶级的数组:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
展开顶层数组的风险是什么?
我应该如何检查,看看我是否脆弱? 我从第三方购买了许多组件,并有外部供应商开发我的代码。
这是因为几年前,Jeremiah Grossman发现了一个非常有趣的影响gmail的漏洞 。 有些人通过使用不可parsing的文件来解决这个漏洞(bobince先生在这个页面上的技术描述太棒了。)
微软之所以这么说是因为他们还没有修补他们的浏览器(还)。 ( 编辑:边缘和IE 10/11的最新版本已经解决了这个问题。)Mozilla认为这是json规范中的漏洞,因此他们在Firefox 3中修补它。 为了logging,我完全同意Mozilla,它的不幸,但每个Web应用程序开发人员将不得不捍卫自己对这个非常模糊的漏洞。
我认为这是因为Array()构造函数可以被重新定义。 然而,这个问题并不是真正独特的arrays。
我认为攻击(或者一种可能的方式)是这样的:
function Array(n) { var self = this; setTimeout(function() { sendToEvilHackers(self); }, 10); return this; }
浏览器(或某些浏览器)使用[n, n, n]
数组表示法的构造函数。 因此,CSRF攻击可以利用与银行的公开会话,使用<script>
标签击中已知的JSON URL来获取它,然后将其归于您所拥有。