将内容安全策略中的多个域列入白名单

时间:2013-07-22 13:55:52

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

我正在编写Chrome扩展程序,其内容安全策略的白名单中需要有两个域。我查看了官方文档,但我似乎仍无法弄清楚正确的语法。

以下似乎不起作用:

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

修改

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

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

2 个答案:

答案 0 :(得分:12)

根据我对CSP的了解,这在语法上看是正确的。 HTML5 Rocks article on CSP同意您的语法,说:

  

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

但是,您的问题可能是:

  1. 此CSP disallows all subdomains,包括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(不允许的子域名),请求将失败according to the spec

      

    每当用户代理提取URI(包括跟踪重定向时)...如果URI与允许的脚本源不匹配,则用户代理必须表现得好像收到了一个空的HTTP 400响应...

  3. 修改

    要确认,是的,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"
}