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

3
我已经在头部添加了以下内容,以便允许来自同一来源的blob类型图像等和来自Google地图的图像。
img-src 'self' data: blob: https://maps.googleapis.com 

为了让谷歌地图URL更加高效,其会转换为特定于国家/地区的域名,例如:

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 http://*.google.com.au...

有没有办法在 URL 的结尾使用通配符,如下所示:

img-src http:/maps.google.*

我希望允许访问来自maps.google.com.au或maps.google.co.nz等网站的资源。这与使用https:*或允许所有*不同,我想使用特定的来源。有没有办法实现这个目标?


还可以查看有关如何处理此问题的其他答案:https://dev59.com/61sX5IYBdhLWcg3wALXa - Barry Pollard
2个回答

4

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(顶级域)在某个国家代码下会出售这个域名(至少在 Google 起诉我之前)。
你所要求的通配符模式就像信任来自 “Something Street” 的任何邮件,而不关心该街道属于哪个国家。
相反,要么动态地提供与你使用的来源匹配的 CSP header,要么将每个有效的 TLD 包含在 CSP 中作为空格分隔列表。

1
很遗憾,主机名最右侧的通配符不起作用。在HTML5Rocks的内容安全策略页面上检查,通配符被接受,但仅限于方案、端口和主机名最左侧位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接