关于iframe跨域使用postMessage的实现

2020-04-21 22:47:38易采站长站整理

一、伪造数据发送方

攻击方式:伪造一个父页面,引导使用者触发功能,发送消息给子页面,如果子页面将父页面发送的消息直接插入当前文档流,就是引发XSS攻击,或者子页面使用父页面传递的消息进行其他操作,例如写入数据,造成安全问题。

防范方式:子页面iframe对接收到的message信息做域名限制


// 子页面iframePage.html

//监听message事件

window.addEventListener("message", function(event){

origin = event.origin || event.originalEvent.origin

if(origin == 'https://A.com'){

console.log( '这里是接收到来自父页面的消息,消息内容在event.data属性中', event )

}

}, false)

二、伪造数据接收方

攻击方式:伪造一个子页面,在父页面中引入子页面,在伪造的页面中接收父页面发送的消息,此时可以获取用户的敏感消息。

防范方式:父页面对发送消息的页面做域名限制


// 父页面index.html

//获取iframe元素

iFrame = document.getElementById('iframe')

//iframe加载完毕后再发送消息,否则子页面接收不到message

iFrame.onload = function(){

//iframe加载完立即发送一条消息

iFrame.contentWindow.postMessage('MessageFromIndexPage','https://B.com');

}