根据我对 CSP 的了解,这在语法上看起来是正确的。关于 CSP的HTML5 Rocks 文章同意您的语法,说:
script-src https://host1.com https://host2.com
会正确地将两个来源都指定为有效。
但是,您的问题可能是:
此 CSP不允许所有子域,包括www.foo.com
和www.example.com
。您可以显式添加这些子域主机名,也可以使用它https://*.foo.com
来允许所有子域。
如果您的任何脚本请求重定向到未经允许的域,则请求将失败。例如,如果https://example.com/foo.js
使用301
或302
重定向到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
”警报,表示其中一个库无法加载。