window.postMessage()如何“安全”?

时间:2019-06-14 19:46:07

标签: javascript

请多多包涵,我只有一些Web开发经验。在window.postmessage()文档中显示了语法,用于侦听侦听页面上的postmessage()引起的事件。出于安全原因明确声明,当触发事件侦听器时,应检查event.origin以确保其来自预期的主机。通常以以下方式完成:

if ( event.origin == somehostname.com) {}

让我感到困惑的是,为什么恶意用户不能只是使用断点暂停代码并修改某些hostname.com值。同样的事情可能也适用于postmessage()本身以及目标原点参数的调用。当有人可以在字符串值发生之前就对其进行编辑时,这如何提供“安全性”?

2 个答案:

答案 0 :(得分:2)

您的理论恶意用户已经可以完全访问两个网站的客户端。他们不需要postMessage来访问其中任何一个数据。

Same Origin Policy旨在阻止恶意网站使用浏览器用户的凭据(被诱骗访问恶意网站)从其他网站访问数据。< / p>

postMessage可以限制允许哪些来源读取其发送的消息,因此,如果网站使用它来发送包含机密信息的消息,则它可以将发布的消息标记为是 some-trusted -website.com ,它将阻止恶意网站阅读邮件。

答案 1 :(得分:0)

“恶意” 用户当然可以使客户端代码执行他们想要的大多数事情,例如通过{{将他们已经有权访问的信息]泄漏到另一个网站。 1}} ,只需将其复制并粘贴到电子邮件中即可。

在后续评论中,您将“我们创建了一个恶意的网站准备接收一些机密信息”作为威胁模型。完全是另一回事。

是的,任何使用window.postMessage敏感数据的网站都应该至少进行 一项安全操作:

  1. 检查window.postMessage标头,以确保您的父级是受信任的域

  2. 设置Referer以将收件人限制为预期的收件人