揭密鬼页 浅析浏览器跨域安全问题
来源:IT 专家网 时间:2008-10-07 18:11:00
Manuel Caballero在BLUEHAT大会探讨了《A Resident in My Domain》议题,字面上的意思就是驻留在自己的域,随后开始有国内的安全研究人员在BLOG上写了一些相关的内容,这段时间一直和HI群里的朋友在讨论这个问题,大家都简称为鬼页,这个鬼页非常神奇,可以跟随你浏览的每个页面。经过鬼页的启发,我也对浏览器的跨域安全问题进行了测试。
1.来自伪协议的呼唤
JAVASCRIPT里大家都频繁使用window对象,window对象代表的就是浏览器的窗口,我们就来测试下window对象的open方法,尝试让新开的窗口执行伪协议。在本机搭建一个WEB服务器,开始做下实验:
用各个浏览器浏览 http://127.0.0.1/test.htm ,下面是test.htm的脚本内容:
<script>
x=window.open('about:blank');
x.location="javascript:alert(document.domain)"
</script>
结果:
IE6:执行了伪协议,认为弹出窗口的域是127.0.0.1。
IE7:执行了伪协议,认为弹出窗口的域是127.0.0.1。
Firefox:执行了伪协议,认为还没有域为NULL。
Firefox这里对于这个接口可能也有个BUG,对于IP地址的弹窗Firefox没有辨认出域,但是在实际绑定域名的情况下还是辨认出了域。
为了下面的部分方便理解,我把这里弹窗的关系给简称下,原窗口叫父页,弹出窗口叫子页,实验过后我们证明了:父页和子页都在同一个域里,父页可以重定向子页的URL地址,甚至执行伪协议。
2.父页和子页的关系
如果父页让子页访问其他域后,父页和子页是否就脱离关系了呢?
继续测试,用各个浏览器浏览 http://127.0.0.1/test2.htm ,下面是test2.htm的脚本
内容:
<script>
x=window.open('about:blank');
x.location="http://www.163.com" //访问163网站
setTimeout(function(){
x.location="http://127.0.0.1";
},5000) //5秒后重定向到127.0.0.1
</script>
这次IE6、IE7、Firefox都达成了一致,实验的结果是子页访问了163网站,5秒然后又跳回了127.0.0.1。
所以就算是子页在访问了其他域后,还是会受父页的控制。