DevTools 工具箱加载在一个指向 about:devtools-toolbox 的 iframe 中。此 iframe 应用了 内容安全策略 (CSP),这将降低潜在攻击的风险。但是,这可能会限制可以在工具箱文档中加载的资源。
当前 DevTools CSP¶
about:devtools-toolbox 的当前策略是
default-src chrome: resource:; img-src chrome: resource: data:; object-src 'none'
这意味着
chrome://
和resource://
允许任何资源chrome://
和resource://
和data://
允许图像
有关哪些资源和请求在 CSP 范围内,您可以阅读 MDN 上的 default-src 文档。
DevTools CSP 的范围¶
此内容安全策略目前仅适用于工具箱文档。如果您在面板文档中工作,或者您在服务器端工作,则这些限制不应适用。
请注意,即使在面板文档中工作时,我们有时也会与工具箱文档交互,例如显示工具提示。因此,通常为工具提示创建的任何资源都将受到 CSP 限制。
识别 CSP 问题¶
打开浏览器工具箱,如果您看到类似以下错误
JavaScript Error: "Content-Security-Policy: The page’s settings blocked the loading of a resource [...]"
则表示您正在尝试加载一个使用禁止方案的资源。
修复 CSP 问题¶
如果您的实现遇到 CSP 问题,第一个建议是尝试使用受支持的方案。如果这不是一个选项,请检查您是否可以在工具箱文档之外执行请求或加载资源。例如,如果您正在加载的资源与调试目标相关,则可以(并且可能应该)从 DevTools 服务器中的一个 actor 发出请求,然后从服务器转发到客户端。服务器发出的请求不会受到 CSP 的影响。
如果似乎唯一的解决方案是更新 CSP,请联系安全同行以讨论您的用例。您可以 在 Core/DOM: security 中提交错误。
修复测试中的 CSP 问题¶
如果问题来自测试代码,则应能够更新测试以使用受支持的方案。一个典型的问题可能是尝试使用 data-uri 在工具箱内加载 iframe。相反,您可以创建一个 HTML 支持文件并从 chrome:// 或 resource:// URL 加载它。
通常,添加支持文件后,您可以通过以下方式访问它:
https://example.com/browser/[path_to_file]
或
chrome://mochitests/content/browser/[path_to_file]
例如,devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.html 在测试中通过 http://example.com/browser/devtools/client/aboutdebugging/test/browser/resources/service-workers/controlled-sw.html
访问。
如果您绝对必须使用不受支持的方案,则可以仅针对测试关闭 CSP。为此,您需要临时更新两个首选项
await pushPref("security.csp.enable", false);
await pushPref("dom.security.skip_about_page_has_csp_assert", true);
pushPref
帮助器将确保首选项在测试结束时恢复到其初始值。