发信息“postMessage”方法
otherWindow.postMessage(message, targetOrigin);
otherWindow:指目标窗口,也就是给哪个window发信息,是window.frames 属性
window.open 方法创建的窗口
PostMessage
需要特别严谨验证:输入,origin
如:验证domain 是不是等于 “http://xxxxx.com”的 -》
popUp = window.open(domain+'其他路径',‘myWindow’); popUp.postMessage(message.domain);
然后建立监听事件:
window.addEventListener('xxx', function(event){
if(event.origin !== domain) return;
......
},false)
https的站不建议使用onmessage
不要相信任何人给发的链接
接受信息的 onmessage 事件
data: 信息
origin: 信息来源地址
source: 源DOMWindow 对象
var onmessage = function (event) {
var data = event.data;
var origin = event.origin;
}
if (typeof window.addEventListener != 'undefined') {
window.addEventListener('message', onmessage, false);
}else if (typeof window.attachEvent != 'undefined') {
window.attachEvent('onmessage', onmessage);
}
空referer或JS的URL跳转漏洞会绕过白名单referer限制
window.open 到iframe里的时候,浏览器popup blocker不会提示
origin校验可能会不严谨:indexOf(“www.wooyun.org” ) !=-1
RegExp(“^http://www.wooyun.org$“) 这里的点可以表示任意字符
Ref:来自 乌云著名段子手—— 呆子不开口