众所周知,在浏览器里跨站获得Cookies是不可能的,也就是说,在A站的网页中的脚本是无法获得B站在用户的浏览器里的cookies的。
但是,我找到一个古怪的办法可以获得别的站点留下的cookies,但只能在IE下使用,在其它浏览器并没有效果。我将通过示例获得Gmail留下的Cookies从而显示出Gmail中的内容。
首先,我用这个网址在IE6.0.2800.1106上演示不跨站是很容易获得其它页面的内容:
https://www.zuola.com/test2/
当你点击上面的文字时,当前页面将出现https://www.zuola.com/wap/ 中的WAP内容,xmlhttp将向网站请求https://www.zuola.com/wap/ 中的内容并在指定位置显示出来,这是xmlhttp的正常的用法。
然后,看另外一个网址之前,你必须把https://www.zuola.com 加入到受信任的网站,由于我的站点没有用到由IE浏览器默认信任的机构如verisign.com颁发的安全证书,所以只好用手工方式把这个站点加入到受信任的站点:在工具菜单中选“Internet选项“—>”安全“标签—>受信任的站点—>站点—>取消选择“对应该区域中的所有站点要求服务器验证(https:)” —>添加—>https://www.zuola.com —>确定—>确定。如果我的网站购买了verisign.com颁发的安全证书,你也许不需要这么复杂就能看到演示效果了。
然后登录到你的Gmail,登录时选择“在此计算机上保存我的信息“,
接着,你访问https://www.zuola.com/test/
点击一下“点此显示Gmail的内容”,是不是发现你的邮件列表出来了?我是让xmlhttp访问http://m.gmail.com ,http://m.gmail.com读取了你的浏览器中的Cookies信息并把邮件内容提供给xmlhttp的请求,最终显示在另一个域的页面上。
这小技巧有什么用呢?我也不知道,等你来发掘吧。我甚至不知道这是不是真的跨域登录。 我这所以去到这么一个小玩意,我是为了研究如何让wealog的用户不用再次登录到zhuaxia就能在wealog显示出zhuaxia的内容出来。这方法如果能在firefox通用的话,我会不惜去购买一个verisign.com颁发的安全证书安装在服务器上以便站点成为默认的受信任的站点。可惜我没测试成功,也许是xmlhttp在firefox有不同的语法来实现同样的功能吧。
看来,要实现wealog的用户不用再次登录到zhuaxia就能在wealog显示出zhuaxia的内容,只有依靠Passport这种应用了。Passport才是真正的跨站登录解决方案。
欢迎在其它版本IE和浏览器下测试。源代码在https://www.zuola.com/test/有提供下载,此代码中没有用到 mhtml。
这只是一个漏洞吧