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 帮助器将确保首选项在测试结束时恢复到其初始值。