Javascript 将window.origin与postMessage一起使用是否安全?

Javascript 将window.origin与postMessage一起使用是否安全?,javascript,security,cross-domain,postmessage,window.location,Javascript,Security,Cross Domain,Postmessage,Window.location,使用postMessage时,定义targetOrigin以确保我们不会将数据泄漏到其他站点非常重要 同样重要的是,在接收消息时检查来源,以防止其他站点触发我们的脚本 但是,如果我们只是希望在自己的领域内这样做,那么以下方面有什么问题吗: targetWindow.postMessage({message}, window.origin); -- 我不是安全专家,但消息的来源&可能来源属性。所以,检查它是对的,我们可以认为它是安全的。 现在,问题开始是: 对照窗口的来源检查消息的安全性如何 来

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

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

但是,如果我们只是希望在自己的领域内这样做,那么以下方面有什么问题吗:

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


我不是安全专家,但消息的
来源
&可能
来源
属性。所以,检查它是对的,我们可以认为它是安全的。 现在,问题开始是:

对照窗口的
来源检查消息的
安全性如何
来源

首先,考虑检查窗口的<代码>源代码>代码有2种方法。您尝试使用的是另一个

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

window.origin=https://www.example.com';
console.log(window.origin=='https://www.example.com');
我不认为这是一个直接的安全威胁(尽管我不是上面提到的安全专家),但在某些条件下,它会使成功执行攻击变得太容易

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

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


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

我不是安全专家,但消息的
来源
&可能
源属性。所以,检查它是对的,我们可以认为它是安全的。
现在,问题开始是:

对照窗口的
来源检查消息的
安全性如何
来源

首先,考虑检查窗口的<代码>源代码>代码有2种方法。您尝试使用的是另一个

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

window.origin=https://www.example.com';
console.log(window.origin=='https://www.example.com');
我不认为这是一个直接的安全威胁(尽管我不是上面提到的安全专家),但在某些条件下,它会使成功执行攻击变得太容易

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

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


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

Hi Igor,非常感谢您的帖子。我的倾向是,如果有人有权更改window.origin到他们的域,那么我认为他们已经有足够的权限来肆意破坏!如果有支持postMessage而不支持window.origin的浏览器,这将是相关的。我找不到支持表。你能?我想我们可能确实需要一位安全专家来确定是否有任何理由不这样做。@JamieG如果你想得到安全建议,Hi Igor,非常感谢你的帖子。我的倾向是,如果有人有权更改window.origin到他们的域,那么我认为他们已经有足够的权限来肆意破坏!如果有支持postMessage而不支持window.origin的浏览器,这将是相关的。我找不到支持表。你能?我想我们可能确实需要一位安全专家来确定是否有任何理由不这样做。@JamieG如果你想要一个安全建议,
window.addEventListener("message", e => {
  if (e.origin == window.origin){
    //Trigger something
  }
});