再修改父窗体访问的页面(加载applet的页面test2.htm):
document.cookie='yumen…';
</script>
<input id="who" value="test2.htm">
<applet code="writeFile.class" width="300" height="200">
不支持java虚拟机
</applet>
这两段有什么用呢?首先是cookie问题,如果单纯靠两个页的cookie判断,可能达不到效果,别忘了他们的域是一样的,很可能两个页面cookie都是test2.htm的cookie。但是再加个input就不一样了,input的值可不会因为域而改变。
这样,不同的页面所调用ajax的结果就有所区别。测试结果很诡异,我在kxlzx.txt中只找到了test2.htm的cookie,没有后面紧跟的input的值。两个页面都有input,怎么会拿不到值?打开ff的错误控制台,看到了如下错误:
执行这段js的页面根本就没有这个input!两种解释:
1、还有个页面偷偷执行了这段ajax,然后消失的无影无踪。
2、这段JS在第二个页面(子窗体)中执行,但是执行的时候子窗体还没有访问php.php。
至少不可能是test2.htm执行了js,如果他执行js,一定能拿到“who”的值,input在applet之前就加载了。无论是哪种可能,跨域0day梦,宣告结束。父窗体不能让子窗体执行脚本,只能让他访问一些页面。好吧,你狠!不过,我们回到一个话题来:“为什么要让子窗体执行脚本?”,很显然,我们想要子窗体的cookie。
整理思路:
1、父窗体可以控制子窗体到处访问。
2、父窗体不能让子窗体执行脚本。
3、我们想拿子窗体的cookie。
4、只有同一个域下,才能取cookie。
你应该感到有趣才是,因为作者不可能把一段废话一一列举在这里,你能想到什么呢?公布答案!假设我们能控制父窗体的代码,想要子窗体的cookie步骤:
1、我们可爱的IE浏览器打开http://www.inbreak.net/blog/kxlzx.jpg时,如果jpg里面其实是js,发生什么?很好!会执行JS!步骤一的关键就是,往子窗口的域名下(网站),传一个jpg文件,里面是JS代码。Js代码用来:获取cookie,然后使用AJAX技术将cookie提交到同一个域的某个能储存东西的地方,比如留言本。
2、既然要获取cookie,那浏览器至少要有子窗体的cookie,比如他登录过就会有cookie。让父窗体先打开子窗体的kxlzx.jpg,一秒,闪一秒就足够代码执行了,之后的事情就不用我说了。