【发布时间】:2016-11-13 12:39:12
【问题描述】:
定义: 请从一开始就注意,通过“注入脚本”、“扩展代码”和“内容脚本”,我将使用question 的出色第一个答案中提供的定义。
假设:如果我直接在我注入的脚本(在网络区域)中处理机密信息,不如我在内容脚本和扩展的 chrome:// 区域中处理机密信息安全代码。因此,我应该使用消息传递将机密信息从 web 区域发送到 chrome:// 区域以进行处理。
问题:我正在构建一个 Google Chrome 扩展程序,我需要在其中对从我注入的脚本派生的敏感用户数据运行一些操作。有问题的数据是机密的,我必须尽我所能确保在我对其进行操作之前,除了扩展程序的用户之外,任何人都无法看到它。在可用于在注入脚本和扩展代码/内容脚本之间传递消息的 3 种技术(定义如下)中,哪种技术最适合此目的?
我对可用于在注入脚本和扩展代码/内容脚本之间传递数据的 3 种不同技术的理解:
对于注入脚本和扩展代码(例如背景页面)之间的消息传递,可以使用chrome.runtime API。
对于注入脚本和内容脚本之间的消息传递,可以使用window.postMessage。
在注入脚本和内容脚本之间传递消息的另一种方式是通过document.dispatchEvent(CustomEvent)。
我的理解是方法 1. 不能用于注入脚本和内容脚本之间的消息传递,而方法 2. 和 3. 不能用于注入脚本和扩展代码之间的消息传递(除非消息被转发通过内容脚本到例如背景页面)。
【问题讨论】:
-
第一种技术是(在我看来)最好的选择,因为任何人都可以拦截来自
window.postMessage(假设域匹配)和document.dispatchEvent的消息,如果他们知道它们会发生的话。至少你可以通过传递一个扩展 id 来限制第一种技术广播到特定的扩展。 -
您没有提到的另一个第四个选项是使用 CORS 创建一个
XMLHttpRequest到一个安全网站,并通过套接字或长轮询将该信息从服务器中继回扩展。
标签: javascript google-chrome security google-chrome-extension message-passing