Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1202889
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-26 15:56:12

 postMessage 是为了解决两个窗口的互相通信用的。

    传统的两个iframes或者是窗口之间要互通信息,特别是在跨域的情况下,一般是使用 locaton.hash 或者一些其他的参数来实现。

    比如 window.open("");

    那么 info-1234 就能够被传递到新窗口中。

    使用 window 对象的一些其他属性也可以跨域传递信息。 

    postMessage 则是 HTML 5 中新的功能,使得两个窗口之间可以互相传递信息。

    目前IE 8 和 FF 3 均已实现

    使用方法很简单,当前窗口增加一个 event: message,就可以使用 postMessage 了

    我写了一个简单的POC,来实现在两个不同域的窗口之间互发消息
    在A页面:




open a new window

     在B页面
         

运行结果:


    注意以上代码, window.opener 也能够使用 postMessage. 即:子窗口也能和父窗口互相发消息

    而安全性方面,出于安全需求,可以对发消息的来源进行域名的检查

   比如检查 E.origin, 当发现异常时直接 return 就可以了。


   针对以上方法,可以想象出一种新的控制 XSS Slave 的方法,即通过 postMessage 来实施控制

    当XSS后,实现两个窗体之间互发消息,就可以做到实施命令,而且效率非常高,也没有网络延时,这方方法大大的优于传统的 XSS Proxy 、JSON、comet等控制方法。唯一的缺陷是普及率还不太高,但总是一件好事。

    当然在正常的应用中,也将带来更好的用户体验。
阅读(1030) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~