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

Check if a request is a subresource integrity in a Chrome extension

是否可以通过 Chrome 扩展的子资源完整性 (SRI) 检查 script/stylesheet 是否受到完整性保护?

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

从我的角度来看,获取此信息的唯一方法是直接访问 DOM。这意味着我必须暂停所有请求,直到 HTML 被完全解析,这似乎不是可行的方法。

也许 SRI 太新了,扩展无法访问,因为我在 Chrome 扩展文档中找不到它。

是的,您可以确定资源是否受 subresource-integrity, prior to the request for the resource being made, by checking for the appropriate attribute(s) (i.e. integrity) on the element specifying the resource as the element is added to the DOM. You can have a content script that is executed at document_start (either specified in manifest.json (run_at), or injected using tabs.executeScript()1 (runAt)). That script could then set up a MutationObserver to watch elements being placed in the DOM. Each appropriate element type (i.e. <script> and <link>) would then need to be checked for using subresource-integrity. This check/determination will occur prior to the webRequest.onBeforeRequest 事件保护。

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


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