设置为*时,Chrome扩展程序Content-Security-Policy引发错误

时间:2019-07-19 12:56:43

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

我已经尝试了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 个答案:

答案 0 :(得分:2)

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

Chrome扩展程序清单中的

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

  

当前,开发人员可以通过以下方式允许列出来源   方案:blob,文件系统,https和chrome-extension 。主机部分   必须为https明确指定来源的   chrome扩展方案。通用通配符,例如https:,https:// *   和https://*.com不允许; ...

您的CSP中指定的许多值(例如*的{​​{1}}和'unsafe-inline')在script-src中无效,Chrome会忽略它们(警告)解析"content_security_policy"时。

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

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

  

content_security_policy':忽略指令中不安全的CSP值“ *”   'script-src'。

编辑: 我只是注意到“错误”页面(chrome://extensions/)的行为不一致。似乎存在一个错误,导致仅在重新加载扩展程序后才会显示有关被忽略的CSP值的警告。

文档链接:

"content_security_policy" in Chrome

"content_security_policy" in Firefox
(规范基本上是相同的,但我发现关于MDN的文档更好,更易于遵循。)