跨窗口 postMessage 怎样避免把消息发给错误对象?
参考答案
发送端应尽量指定准确的 targetOrigin,而不是无条件使用星号。接收端检查 event.origin、必要时检查 event.source,并校验消息结构和允许的操作,不能仅因为收到了消息就执行其中指令。
窗口可能在建立引用后导航到别的地址,因此保留一个 window 引用不代表它永远属于原来的可信页面。消息内容也不是天然安全的 HTML 或代码,插入页面和执行操作时仍需遵守对应安全边界。
建议为消息定义明确类型、版本和关联 ID,限制可调用能力。不要把 postMessage 当作绕过同源策略后拥有全部权限的通道,也不要把访问令牌发送给未经严格识别的目标。