无法将内容安全策略img-src设置为与特定于国家/地区的域一起使用

时间:2016-09-01 13:12:56

标签: html google-maps google-api content-security-policy

我在Header中添加了以下内容,因此它允许来自相同的源,blob类型的图像等以及谷歌地图中的图像。

logMessageFormat=com.my.package.logging.P6spyHibernateSQLFormatter

为了提高效率,Google地图网址会更改为特定国家/地区的网址,例如

http://maps.google.com.au/mapfiles/ms/icons/green-dot.png http://maps.google.co.nz/mapfiles/ms/icons/green-dot.png

我们可以在URL之前使用通配符,如下所示

img-src 'self' data: blob: https://maps.googleapis.com 

无论如何,我可以在URL的末尾使用通配符,如下所示,

img-src http://*.google.com.au...

并允许从maps.google.com.au或maps.google.co.nz等访问资源?

而不是使用https:*或允许所有*我想使用这样的特定来源。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

CSP的目的是限制页面资源的来源。

通配符允许一点灵活性,因此您可以:

img-src http://*.mysite.com

然后从以下方式提供来源:

cdn1.mysite.com/...
cdn2.mysite.com/...

但是,他们不会以其他方式工作,因为这会让任何人进入。

例如,在您的示例中,您有类似的内容:

http://mysite.au/...
http://mysite.nz/...

所以你保护'您的网站:

img-src http://mysite.*

现在假设我想破解你的网站?很容易 - 我只是去购买mysite.ru,将我的恶意脚本放在那里,你的网站就可以了。

您可能拥有mysite中的.au,可能拥有mysite中的.nz,但他们彼此无关,与其他任何事情无关顶级域名权限。这甚至适用于像maps.google.*这样的大型玩家 - 我确定某些狡猾的顶级域名(TLD)会在某个地方根据其国家/地区代码向我出售该域名(至少在谷歌起诉我之前)。

您要求的通配符模式就像信任任何来自" Something Street"但不关心街道所在的国家。

而是动态提供CSP标头以匹配您正在使用的来源,或者将CSP中的每个有效TLD都包含在空格分隔列表中。

答案 1 :(得分:1)

不幸的是,主机名最右侧位置的通配符不起作用。检查HTML5Rocks的Content Security Policy页面,接受通配符,但仅作为

  • 方案
  • 端口
  • 主机名的最左侧位置