【问题标题】:Chrome Extension Content-Security-Policy throwing errors, while it's set on *Chrome 扩展 Content-Security-Policy 抛出错误,而它设置为 *
【发布时间】:2019-11-28 11:31:48
【问题描述】:

我已经尝试了 manifest.json 中 CSP 设置的所有可能设置,这是我当前的(我知道非常开放且不安全)。

当我打开后台检查扩展程序时,重新加载后第一次很好,有时直到第五次,然后突然下面的错误开始涌现..

"content_security_policy": "default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';"

我仍然收到以下错误

拒绝加载脚本“https://myapp-12345.firebaseio.com/.lp?start=t&ser=1234567&cb=15&v=5”,因为它违反了以下内容安全策略指令:“script-src 'self' 'unsafe-eval'”。请注意,'script-src-elem' 没有显式设置,因此 'script-src' 用作备用。

我尝试过的

  • 在我更改 manifest.json 时删除 chrome 扩展

我有什么遗漏吗?

【问题讨论】:

  • 1) 错误信息显示 script-src 中没有 * 2) 为什么不指定域 myapp-12345.firebaseio.com 而不是 *
  • 因为这也行不通,所以我正在尝试放松规则,看看发生了什么。
  • 既然它应该工作并且通常工作,显然你在 Chrome 中遇到了一个错误。看看有没有被crbug.com举报或者自己举报。

标签: javascript google-chrome-extension content-security-policy


【解决方案1】:

只能在一定程度上放宽Chrome扩展中的CSP

Chrome 扩展清单中的"content_security_policy" 条目仅允许开发人员在一定程度上放松 CSP。 style-src 允许的值子集非常有限,引用自official documentation

目前,开发者可以将以下来源列入许可名单 方案:blob、文件系统、https 和 chrome-extension。主机部分 必须为 https 和 chrome 扩展方案。通用通配符,例如 https:、https://* 和 https://*.com 是不允许的; ...

在您的 CSP 中指定的许多值(例如,*'unsafe-inline' 用于 script-src)在 "content_security_policy" 中无效,并且 Chrome 在解析 manifest.json 时会忽略它们(并发出警告)。

为什么您看不到有关无效 CSP 值的警告或错误

我怀疑您可能在后台页面的 JavaScript 控制台中检查错误。您需要首先检查为您的manifest.json 生成的错误和警告。转到chrome://extensions/ 并单击您的扩展程序的错误 按钮。会有几个这样的警告:

content_security_policy':忽略指令中的不安全 CSP 值“*” '脚本源'。

编辑: 我刚刚注意到错误页面 (chrome://extensions/?errors=<extension-id>) 的行为不一致。似乎有一个错误导致有关被忽略的 CSP 值的警告仅在重新加载扩展后才显示。

文档链接:

"content_security_policy" in Chrome

"content_security_policy" in Firefox
(规范基本相同,但我发现 MDN 上的文档更好,更容易理解。)

【讨论】:

  • 谢谢!我在我的扩展错误页面中没有看到警告,而只是在弹出页面检查器中。这说明了什么?
  • 这很奇怪。如果您的 manifest.json 中有根本不正确的值,则扩展程序的错误页面上应该有警告。您是否尝试通过单击扩展页面 (chrome://extensions/) 上的圆形箭头按钮来重新加载扩展?正如我在编辑中提到的,Chrome 似乎与警告不一致,并且在某些情况下仅在重新加载后才会显示。
  • 我有,这很奇怪,它还会循环对firebase的请求,每秒都会抛出错误,但它只会在5分钟后发生(当我重新解压应用程序时)。
猜你喜欢
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多