在下面的视频中,Microsoft PDC演示者在时间标记21:40表示,包装所有JSON以使其不是顶级数组很重要:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
解开顶层阵列的风险是什么?
我应该如何检查并确定自己是否脆弱?我从第三方购买了许多组件,并且有外部厂商来开发我的代码。
在下面的视频中,Microsoft PDC演示者在时间标记21:40表示,包装所有JSON以使其不是顶级数组很重要:
https://channel9.msdn.com/Events/PDC/PDC09/FT12
解开顶层阵列的风险是什么?
我应该如何检查并确定自己是否脆弱?我从第三方购买了许多组件,并且有外部厂商来开发我的代码。
Answers:
这是因为几年前,耶利米·格罗斯曼(Jeremiah Grossman)发现了一个影响gmail的非常有趣的漏洞。有些人通过使用解决了这个vulnerabilty无法解析的克鲁夫特(此页上先生bobince的技术说明是太棒了。)
微软之所以这样说,是因为他们尚未修补浏览器。(编辑: Edge和IE 10/11的最新版本已解决了该问题。)Mozilla认为这是json规范中的漏洞,因此他们在Firefox 3中对其进行了修补。作为记录,我完全同意Mozilla,它的不幸之处在于,但每个Web应用程序开发人员都必须自我保护,以免受这种非常晦涩的漏洞的侵害。
我认为这是因为Array()构造函数可以重新定义。但是,这个问题并不是数组真正的唯一问题。
我认为攻击(或一种可能的方式)是这样的:
function Array(n) {
var self = this;
setTimeout(function() {
sendToEvilHackers(self);
}, 10);
return this;
}
浏览器(或某些浏览器)使用该构造函数来[n, n, n]
表示数组。因此,CSRF攻击可以利用您与银行的公开会话,用<script>
标签击中已知的JSON URL来获取它,然后欺骗您的所有权。
{"d":[1,2,3]}
将只是为返回的易感[1,2,3]
。
{
JavaScript行的开始处的A被解释为代码块,而不是对象文字。因此,您的{"d":[1,2,3]}
脚本不是有效的脚本,因此不会被浏览器执行。只需尝试一下:)