javascript - Chrome 扩展内容脚本之间的 postMessage 安全性如何?可能的替代方案?

标签 javascript security google-chrome-extension postmessage content-script

根据this article on MDN ,使用 postMessage 在 chrome 中与内容脚本之间传递消息并不安全,因为无法正确定义源属性,并且其 targetOrigin 很难安全地传递到潜在的恶意站点。这仍然是真的吗?是否有其他方法可以确认收到消息的来源,并仅将消息发送到特定的内容脚本?或者除了完全使用内容脚本之外还有其他选择吗?

最佳答案

MDN 文章中的“chrome”并不是指“Google Chrome”,而是指以 Chrome 权限运行的扩展代码(look here 表示“chrome”在 Firefox 中的其他含义)。

在 Google Chrome/Chromium 中,内容脚本在 different environment 而非网页中运行(这意味着内容脚本中的 window 与网页中的 window 不同)。
但是,当您从内容脚本向页面发送消息时,event.source 将与页面的 window 相同。因此,要验证消息是否确实是从同一页面内的(内容)脚本发送的,您可以使用 if (event.source === window) { ... }

如果您想将消息发送到另一个内容脚本(在同一选项卡中),那么您有两个选择:

  1. 如果框架位于不同的来源,或者内容脚本位于不同的选项卡中,则您必须向后台页面发送消息,后台页面又使用 Chrome extension message passing API 将消息传递到目标内容脚本.
  2. 如果通信帧位于同一源,则它们的变量可以直接共享,而无需使用消息传递 API。使用 windowtopparent<HTMLIFrameElement>.contentWindow 等引用它们的 frames[index] 对象。
<小时/>

从一个内容脚本向另一个内容脚本获取消息的另一种(黑客)方法是通过 chrome.storage API。在接收端,绑定(bind) chrome.storage.onChanged 事件。要“发送”消息,请使用 chrome.storage.local.set 。一旦您收到(未)收到消息,请不要忘记删除键值对。

关于javascript - Chrome 扩展内容脚本之间的 postMessage 安全性如何?可能的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368187/

相关文章:

javascript - WebService [Get] 请求的安全问题?

javascript - Chrome 扩展程序弹出窗口中的文件输入

javascript - 在 Alfresco 中向多个收件人发送电子邮件

javascript - 移动设备隐式流上的静默刷新 token

java - Spring 安全 : Ignoring alias of server-name and forcing relogin

java - Play 安全!来自外部申请

google-chrome - 循环浏览标签页,Google Chrome浏览器扩展程序API

javascript - 将 Javascript 对象保存到 Chrome.Storage

javascript - 等待 Bootbox 确认运行 Ajax

javascript - TypeError : [1, 2, 3].foreach 不是函数