【问题标题】: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 中的资源。

标签: javascript google-chrome google-chrome-extension subresource-integrity


【解决方案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 和加载所有资源。


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 2012-12-18
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多