2013-07-22 37 views
9

我正在撰写一个Chrome扩展,该内容安全策略需要在其白名单中包含两个域。我看过官方文档,但我仍然无法弄清楚正确的语法。将内容安全策略中的多个域列入白名单

下似乎不工作:

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

编辑:

我的两个内容脚本和我的弹出能够达到foo.com,但是,也不能达到example.com 。

铬扩展能够在CSP中列出多个来源的白名单吗?

+0

内容脚本不受扩展的CSP影响,但受页面影响。 –

+0

广泛编辑我的答案;请确认我的示例扩展适用于您,并且您没有执行我在答案中详述的任何错误。 – apsillers

+0

你真的想要达到'example.com'吗?实际的'https:// example.com'有两个问题:第一,它重定向到https:// example.iana.org /;第二,它使用不适合其域的证书,导致Chrome阻止它。 (当你输入URL的时候,你肯定会看到一个警告屏幕,我不确定它是如何处理脚本资源请求的,但是我猜测它会阻止它们。) – apsillers

回答

10

从我所了解的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. 如果您的任何脚本请求重定向到未经允许的域,请求将失败。每当用户代理提取一个URI

    :例如,如果https://example.com/foo.js301302重定向到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”警报,表示其中一个库无法加载。

+0

非常感谢你提供的所有帮助。我试图联系的域名有一些奇怪的重定向规则,它们在某些条件下强制执行HTTP。 –

+0

非常有见地的答案! – fegemo