postMessage 目标来源 - window.parent.origin 与“*”

postMessage target origin - window.parent.origin vs "*"

window.parent.postMessage(message, window.parent.origin)window.parent.postMessage(message, '*') 更安全吗?

我们有一个由父框架加载的 iframe 组件。该框架可以来自任何地方(我们的 Web 应用程序是一个共享组件,可以从我们主要产品的任何客户端安装中访问)。所以我们无法提前知道是谁加载了我们,除非我们保留了某种我们没有的允许来源的数据库。

我们正在向我们的父框架发送一个postMessage(),我们无法提前知道目标来源,所以我放了'*'。我的同事建议我改用 window.parent.origin,但据我所知,这具有相同的效果 - postMessage 将检查目标原点是否与其本身相同!更不用说跨域时失败了。

我是不是漏掉了什么?使用 window.parent.origin 是否比通配符更安全?

如果父页面被重定向到可能接收包含敏感数据的消息的恶意站点,通配符 "*" 可能会很危险。

在这种特殊情况下,parent.origin 不会提供任何安全优势。理想情况下,应该使用组件的服务器来检测和验证父级 window 的来源。