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 的来源。
window.parent.postMessage(message, window.parent.origin)
比 window.parent.postMessage(message, '*')
更安全吗?
我们有一个由父框架加载的 iframe 组件。该框架可以来自任何地方(我们的 Web 应用程序是一个共享组件,可以从我们主要产品的任何客户端安装中访问)。所以我们无法提前知道是谁加载了我们,除非我们保留了某种我们没有的允许来源的数据库。
我们正在向我们的父框架发送一个postMessage()
,我们无法提前知道目标来源,所以我放了'*'
。我的同事建议我改用 window.parent.origin
,但据我所知,这具有相同的效果 - postMessage
将检查目标原点是否与其本身相同!更不用说跨域时失败了。
我是不是漏掉了什么?使用 window.parent.origin
是否比通配符更安全?
如果父页面被重定向到可能接收包含敏感数据的消息的恶意站点,通配符 "*"
可能会很危险。
在这种特殊情况下,parent.origin
不会提供任何安全优势。理想情况下,应该使用组件的服务器来检测和验证父级 window 的来源。