window.name和postMessage跨域详解

simonbaker

文章不易,请关注公众号 毛毛虫的小小蜡笔,多多支持,谢谢。

概念

window.name

1、在一个窗口还没关闭之前,同一个窗口的所有页面都共享同一个window.name。

这个窗口可理解为chrome浏览器的一个tab标签页面。另外,从一个页面中跳转到另一个页面后,这些页面都共享同一个window.name。

2、每个页面都能读和写window.name。

这个可能就是安全问题的来源。

3、window.name在chrome上可存储小于等于2MB的数据。

postMessage

可以安全地实现的跨源通信。

语法:
otherWindow.postMessage(message, targetOrigin, [transfer]);

事件:
window.addEventListener("message", receiveMessage, false);
message的属性有:data, origin, source

安全问题比较

攻击者页面:A
受害者页面:B

window.name的问题

1、可通过在A中嵌入B,实现在A获取B的window.name的数据

2、如果B中存在eval执行window.name的代码,则存在xss安全问题,因为在1的基础上,A可修改window.name的数据,从而导致B出现xss问题

Demo

验证问题1

A页面地址:
http://localhost:3000/window....

B页面地址:
http://localhost:3001/window....

效果如下截图所示:
image.png



详情 请查看:毛毛虫的小小蜡笔

阅读 286
174 声望
2 粉丝
0 条评论
174 声望
2 粉丝
文章目录
宣传栏