我正在编写Chrome扩展程序,其内容安全策略的白名单中需要有两个域。我查看了官方文档,但我似乎仍无法弄清楚正确的语法。
以下似乎不起作用:
"content_security_policy": "script-src 'self' https://foo.com https://example.com; object-src 'self'"
修改
我的内容脚本和弹出窗口都可以访问foo.com,但是,它们都无法访问example.com。
Chrome扩展程序是否能够在CSP中将多个来源列入白名单?
答案 0 :(得分:12)
根据我对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
来允许所有子域名。
如果您的任何脚本请求重定向到不允许的域,则请求将失败。例如,如果https://example.com/foo.js
回复301
或302
重定向到https://notpermitted.com/foo.js
(不允许的来源)或https://www.example.com/foo.js
(不允许的子域名),请求将失败according to the spec:
每当用户代理提取URI(包括跟踪重定向时)...如果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
”警告,表示其中一个库无法加载。
答案 1 :(得分:0)
我遇到了与白名单安全资源网址相同的问题,并带有以下警告。
尝试安装此扩展程序时出现警告:
«在'script-src'指令中忽略了不安全的CSP值“object-src”。
必须指定CSP指令'object-src'(显式地或通过'default-src'隐式指定)并且必须whitelist only secure resources。
要解析HTTP Content-Security-Policy,请使用manifest.json
文件中的键值。
{
"content_security_policy":
"script-src 'self' https://yash.test.com:8443 'unsafe-eval'; object-src 'self' https://yash.test.com:8443"
}