将window.origin与postMessage一起使用安全吗



使用postMessage时,定义targetOrigin以确保我们不会将数据泄露到其他站点非常重要。

同样重要的是,在收到消息时检查来源,以防止其他网站触发我们的脚本。

但是,如果我们只是希望在自己的域上这样做,有什么问题吗

targetWindow.postMessage({message}, window.origin);

--

window.addEventListener("message", e => {
if (e.origin == window.origin){
//Trigger something
}
});

我不是安全专家,但MDN建议检查消息的origin&可能是CCD_ 2属性。所以,这是正确的检查它&我们可以认为它是安全的。

现在,问题开始是:

将消息的origin与窗口的origin

首先,考虑有两种方法可以检查窗口的origin。您尝试使用的是WindowOrWorkerGlobalScope.origin,另一种是window.location.origin。

我不会使用WindowOrWorkerGlobalScope.origin,因为它可以在客户端被覆盖。试试看:

window.origin = 'https://www.example.com';
console.log(window.origin === 'https://www.example.com');

我不认为这是一个直接的安全威胁(尽管我不是如上所述的安全专家(,但在特定条件下,它可能会使成功的攻击变得过于容易。

CCD_ 7可能是更好的选择,因为它是只读的&它不能在客户端上修改。作为奖励,它有更广泛的浏览器支持。

因此,我会使用window.location.origin或硬编码URL,如MDN所示。

如果硬编码URL由于测试而出现问题,那么如果您的项目使用现代构建工具,则可以使用环境变量。

相关内容

最新更新