为什么使用“*”作为 postMessage 的 targetOrigin 存在安全风险?

Why is using '*' as the targetOrigin for postMessage a security risk?

我很难理解将通配符用于 postMessage() 方法的 targetOrigin 时的安全问题。您调用 postMessage() 的 window 是否已经有一个我们要将数据发送到的来源?怎么会有人能够干涉它?使用 window.location.origin 将 targetOrigin 设置为 window 的原点会不好吗?

我理解在接收端检查事件源的重要性(如图 here),但我似乎无法理解为什么发送端使用当 window 已经有特定来源时,通配符作为 targetOrigin。

这本身不是风险。这只是意味着 任何人 都可以将您的内容嵌入到框架中并阅读您通过 API 发送的消息。如果信息可以安全地信任任何人,那很好。如果数据应该在您的网站、您的访问者和特定合作伙伴网站之间保密,那么您应该更加谨慎地选择您信任的人来处理消息的内容。

明确授予请求来源的权限与使用“*”实际上是一样的。如果数据需要保密,您应该在来源白名单上进行过滤。