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

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

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

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

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

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

最佳答案

是的,您可以确定资源是否受 subresource-integrity 保护,在发出资源请求之前,在将元素添加到 DOM 时,检查指定资源的元素上的适当属性(即 integrity )。您可以拥有content script执行于 document_start (在 manifest.json ( run_at ) 中指定,或使用 tabs.executeScript() 1 ( runAt ) 注入(inject))。然后该脚本可以设置 MutationObserver观察 DOM 中放置的元素。然后需要使用子资源完整性检查每个适当的元素类型(即 <script><link> )。此检查/确定将在 webRequest.onBeforeRequest 之前进行。事件。

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

<小时/>
  1. 获取正确的时间以在 document_start 处执行脚本使用tabs.executeScript()是不平凡的。如何做到这一点将是一个单独的问题。

关于javascript - 检查请求是否是 Chrome 扩展中的子资源完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42940657/

相关文章:

javascript - 如何设计有很多ajax调用的页面?

javascript - 如何修复 jslint 消息 : variable is already defined

javascript - Android 元素选择问题

javascript - 在 Chrome 扩展内容脚本中,我必须在处理文档之前等待 document.ready 吗?

javascript - Chrome Canary 29 中的弹出窗口?

javascript - 使用扩展程序显示带有地址栏的 chrome 弹出窗口

javascript - 从选中的单选按钮传递整数数组而不是数字字符串

html - Chrome 50 更改隐式表格单元格高度行为

google-chrome - 套接字 API : not allowed in packaged apps?

javascript - chrome浏览器能否在网页中动态显示当前时间?