26

我正在编写一个 chrome 扩展,它需要在其白名单中包含两个域以用于内容安全策略。我查看了官方文档,但我似乎仍然无法弄清楚正确的语法。

以下似乎不起作用:

"content_security_policy": "script-src 'self' https://foo.com https://example.com; object-src 'self'"

编辑:

我的内容脚本和弹出窗口都可以访问 foo.com,但是,都无法访问 example.com。

chrome 扩展是否能够在 CSP 中将多个来源列入白名单?

4

2 回答 2

24

根据我对 CSP 的了解,这在语法上看起来是正确的。关于 CSP的HTML5 Rocks 文章同意您的语法,说:

script-src https://host1.com https://host2.com会正确地将两个来源都指定为有效。

但是,您的问题可能是:

  1. 此 CSP不允许所有子域,包括www.foo.comwww.example.com。您可以显式添加这些子域主机名,也可以使用它https://*.foo.com来允许所有子域。

  2. 如果您的任何脚本请求重定向到未经允许的域,则请求将失败。例如,如果https://example.com/foo.js使用301302重定向到https://notpermitted.com/foo.js(未经允许的来源)或(未经允许的子域)响应,则根据规范https://www.example.com/foo.js,请求将失败:

    每当用户代理获取 URI时(包括跟随重定向时)...如果 URI 与允许的脚本源不匹配,则用户代理必须像收到空的 HTTP 400 响应一样行事...

编辑:

只是为了确认一下,是的,Chrome 扩展程序可以将多个 HTTPS 来源列入白名单。您可以构建一个简单的扩展来测试它:

清单.json

{
    "name":"CSP Test",
    "version":"1.0",
    "manifest_version":2,
    "browser_action":{
        "default_popup":"csp_test.html"
    },
    "content_security_policy": "script-src 'self' https://www.iana.org https://ajax.googleapis.com; object-src 'self'"
}

csp_test.html

<script src="https://www.iana.org/_js/2013.1/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="csp_test.js"></script>

csp_test.js

alert(jQuery)
alert(jQuery.ui)

此扩展从远程域加载 jQuery 和 jQuery UI。如果您从 CSP 中删除任一源,您将看到一个“ undefined”警报,表示其中一个库无法加载。

于 2013-07-22T14:15:19.270 回答
0

我在将安全资源 URL列入白名单时遇到了同样的问题,并出现以下警告。

尝试安装此扩展时出现警告:
«在指令“script-src”中忽略了不安全的 CSP 值“object-src”。
« 必须指定 CSP 指令“object-src”(通过“default-src”显式或隐式指定)并且必须仅将安全资源列入白名单

要解析 HTTP Content-Security-Policymanifest.json ,请在文件中使用以下键值。

{
"content_security_policy":
   "script-src 'self' https://yash.test.com:8443 'unsafe-eval'; object-src 'self' https://yash.test.com:8443"
}
于 2018-05-09T07:18:52.800 回答