热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

浅析浏览器的跨域安全问题

发布时间:2012-02-17 09:15文章来源:网络文章作者:Chevo 点击次数:
摘要:Manuel Caballero大牛在这次的BLUEHAT大会上讲了一个叫A Resident in My Domain的议题,字面上的意思就是驻留在自己的域,随后开始有牛人在自己BLOG上写了一些相关的内容,这段时间一直和HI群里的朋友在讨论这个问题,大家都简称为鬼页,这个鬼页非常神奇,...

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的脚本内容:

  1. <script> 
  2. x=window.open('about:blank'); 
  3. x.location="javascript:alert(document.domain)" 
  4. </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的脚本
内容:

 

  1. <script> 
  2. x=window.open('about:blank'); 
  3. x.location="http://www.163.com" //访问163网站 
  4. setTimeout(function(){ 
  5. x.location="http://127.0.0.1"
  6. },5000) //5秒后重定向到127.0.0.1 
  7. </script> 

这次IE6、IE7、Firefox都达成了一致,实验的结果是子页访问了163网站,5秒然后又跳回了127.0.0.1。
所以就算是子页在访问了其他域后,还是会受父页的控制。


3.域与域之间的牵绊

如果父页让子页访问某个域后,再执行伪协议会有什么效果?
用各个浏览器浏览 http://127.0.0.1/test3.htm,下面是test3.htm的脚本内容:

  1. <script> 
  2. x=window.open('about:blank'); 
  3. x.location="http://www.163.com" 
  4. setTimeout(function(){ 
  5. x.location="javascript:alert(document.cookie)"
  6. },5000) 
  7. </script> 

结果是:

IE6:没有反应。
IE7:报错,拒绝访问。
Firefox:报错,alert没有定义。

这些信息明显的说明,如果子页和父页不在同一个域里,浏览器是不允许父页控制子页执行伪协议脚本的。
为了进一步验证,我们让子页打开同一个域里的页面测试:
用各个浏览器浏览 http://127.0.0.1/test4.htm,下面是test4.htm的脚本内容:

  1. <script> 
  2. document.cookie='xss:true' //给本域设置一个COOKIE为xss:true 
  3. x=window.open('about:blank'); 
  4. x.location="http://127.0.0.1" 
  5. setTimeout(function(){ 
  6. x.location="javascript:alert(document.cookie)"
  7. },5000) 
  8. </script> 

结果IE6、IE7、Firefox都顺利的弹出了COOKIE值,说明如果子页和父页在同一个域里,浏览器是允许父页控制子页执行伪协议脚本的。

标签分类: 跨域安全

上一篇:谈XSS攻击检测
下一篇:浅谈新型的sql注入测试