我在Header中添加了以下内容,因此它将允许来自相同来源的blob类型图像等和来自谷歌地图的图像。
img-src 'self' data: blob: https://maps.googleapis.com
为了使其高效,谷歌地图url更改为特定国家的域名,如
http://maps.google.com.au/mapfiles/ms/icons/green-dot.pnghttp://maps.google.co.nz/mapfiles/ms/icons/green-dot.png
我们可以在URL前使用通配符,如下面的
img-src http://*.google.com.au...
我是否可以在URL的末尾使用通配符,就像下面,
img-src http:/maps.google.*
并允许访问maps.google.com.au或maps.google.co.nz等资源?
比起使用https:*或允许所有的*,我想使用像这样的特定来源。有办法做到这一点吗?
CSP的目的是限制您的页面资源可以来自的来源。
通配符允许一些灵活性,因此您可以使用:
img-src http://*.mysite.com
然后从:
传递源cdn1.mysite.com/...
cdn2.mysite.com/...
然而,它们不能以另一种方式工作,因为这会让任何人进入。
例如,在你的例子中,你有这样的东西:
http://mysite.au/...
http://mysite.nz/...
所以你可以用:
来保护你的网站img-src http://mysite.*
现在假设我想入侵你的网站?很简单,我只要去买mysite.ru
,把我的恶意脚本贴在上面,你的网站就会让它进入。
您可能拥有.au
中的mysite
, .nz
中的mysite
,但它们之间没有任何关系,也与任何其他顶级域名权威无关。这甚至适用于像maps.google.*
这样的大玩家——我确信在某个地方会有一些狡猾的顶级域名(TLD)以他们的国家代码卖给我(至少在谷歌起诉我之前)。
你要求的通配符模式就像信任任何来自"某条街"的邮件,但不关心这条街在哪个国家。
或者动态地提供CSP头来匹配你正在使用的源,或者在CSP中包含每个有效的TLD作为空格分隔列表
不幸的是,主机名最右边位置的通配符不起作用。检查HTML5Rocks的内容安全策略页面,可以接受通配符,但只能作为
- 口
- 主机名最左边的位置