从我所了解的CSP来看,这看起来在语法上是正确的。该HTML5 Rocks article on CSP同意你的语法,他说:
script-src https://host1.com https://host2.com
会正确地同时指定来源为有效。
但是,您的问题可能是,要么:
这CSP disallows all subdomains,包括www.foo.com
和www.example.com
。您可以明确添加这些子域名主机名,也可以使用https://*.foo.com
来允许所有子域名。
如果您的任何脚本请求重定向到未经允许的域,请求将失败。每当用户代理提取一个URI
(:例如,如果https://example.com/foo.js
与301
或302
重定向到https://notpermitted.com/foo.js
(未许可原点)或https://www.example.com/foo.js
(非允许的子域)进行响应,该请求将失败according to the spec包括以下重定向)的情况...如果URI不匹配允许脚本源,用户代理必须采取行动,就好像它已收到一个空HTTP 400响应...
编辑:
只是为了确认,Chrome扩展可以将多个HTTPS来源列入白名单。你可以建立一个简单的扩展测试:
manifest.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
”警报,表示其中一个库无法加载。
内容脚本不受扩展的CSP影响,但受页面影响。 –
广泛编辑我的答案;请确认我的示例扩展适用于您,并且您没有执行我在答案中详述的任何错误。 – apsillers
你真的想要达到'example.com'吗?实际的'https:// example.com'有两个问题:第一,它重定向到https:// example.iana.org /;第二,它使用不适合其域的证书,导致Chrome阻止它。 (当你输入URL的时候,你肯定会看到一个警告屏幕,我不确定它是如何处理脚本资源请求的,但是我猜测它会阻止它们。) – apsillers