检查请求是不是是 Chrome 扩展程序中的子资源完整性

Posted

技术标签:

【中文标题】检查请求是不是是 Chrome 扩展程序中的子资源完整性【英文标题】:Check if a request is a subresource integrity in a Chrome extension检查请求是否是 Chrome 扩展程序中的子资源完整性 【发布时间】:2017-08-13 22:02:39 【问题描述】:

是否可以通过 Chrome 扩展程序的子资源完整性 (SRI) 检查脚本/样式表是否受到完整性保护?

我想在发起请求之前知道这一点,所以这应该通过chrome.webRequest.onBeforeRequest 完成。但它没有给出关于请求的提示,因为 SRI 是浏览器端。一切都在请求完成后发生。

在我看来,获取此信息的唯一方法是直接访问 DOM。这意味着我必须暂停所有请求,直到 html 被完全解析,这似乎不是要走的路。

也许 SRI 太新而无法被扩展程序访问,因为我在 Chrome 扩展程序文档中的任何地方都没有找到它。

【问题讨论】:

FWIW 你可以在注入了 "run_at": "document_start" 的内容脚本中使用 MutationObserver 来捕获页面加载期间添加到 DOM 中的资源。 【参考方案1】:

是的,您可以在请求资源之前,通过检查将资源指定为元素被添加到 DOM。您可以拥有在document_start 执行的content script(在manifest.json (run_at) 中指定,或使用tabs.executeScript()1 (runAt) 注入)。然后该脚本可以设置MutationObserver 来监视放置在 DOM 中的元素。然后需要检查每个适当的元素类型(即<script><link>)是否使用子资源完整性。此检查/确定将在 webRequest.onBeforeRequest 事件之前进行。

在完全解析 HTML 之前,这样做不会停止所有请求。它在指定资源的每个元素都输入到 DOM 时执行检查。另一方面,显然,任何您通过使用 MutationObserver 引入的额外处理确实会增加一些额外的时间来解析 HTML、创建 DOM 和加载所有资源。


    使用tabs.executeScript() 获得正确的时间以在document_start 处执行脚本并非易事。如何做到这一点将是一个单独的问题。

【讨论】:

以上是关于检查请求是不是是 Chrome 扩展程序中的子资源完整性的主要内容,如果未能解决你的问题,请参考以下文章

检查用户是不是安装了 Chrome 扩展程序

如何检查 Chrome 扩展程序是不是已完全安装

从Chrome扩展程序检查网站上的Facebook登录

Chrome 扩展:检查后台脚本是不是正在运行

Google Chrome 同步检查是不是通过 API/扩展启用?

在 Chrome 扩展中使用 AJAX 请求检测 URL 是不是支持 HTTP2?