CSP 允许所有 Google 域?

信息安全 谷歌 内容安全策略 第三者
2021-08-20 23:46:25

我正在尝试为网站https://www.lidl-tour.ro开发 CSP 。

现在有一个策略不是在仅报告模式下运行,因此目前没有任何内容被阻止。

该网站联系 googleads.g.doubleclick.net 和 stats.g.doubleclick.net。所以我把这些主机放在了白名单上。

但似乎这些网站(让用户)从 www.google.comwww.google.YOURTLD 加载内容。我可以看到在浏览器想要联系的地方报告了 CSP 违规https://www.google.com.cyhttps://www.google.co.ukhttps://www.google.ithttps:// /www.google.de等等。

现在我不想将所有 google 域都放入 CSP。

我考虑过允许https://www.google .* (我不知道这在 CSP 中是否有效),但这个表达式与https://www.google.co.uk之类的 URL 不匹配。

那么,在这种情况下如何构建有效的 CSP?

4个回答

作为补充 - 它不仅不受支持,即使它受到支持,您也不会想要它。

因为https://www.google.*这样不仅匹配https://www.google.co.uk而且https://www.google.evilattacker.com. 您可以确定这正是攻击者会使用的 URL,因为它可以让他们在大多数网站上对 CSP 进行最佳利用。

这里的问题不在于您的 CSP,而更多地与 CSP 和 Google Analytics(分析)以及类似跟踪系统的目标如何相互矛盾有关。

Content-Security-Policy 标头是在网站所有者知道并控制在其页面上执行的所有内容的假设下设计的,因此可以排除其他所有内容。页面上的跟踪和广告代码并非如此,第三方也在运行他们的代码。

对于“高安全性”应用程序,例如网上银行网站、支付处理器等,通常可以最大限度地减少使用的第三方系统的数量——银行倾向于运行自己的分析系统,而不是使用谷歌的,并且不会t 在网上银行应用程序内的页面上有第三方广告。这指向拥有有效 CSP 的一种选择:在您控制的域上托管您自己的跟踪和广告代码。对于小型企业来说,这并不总是可行的。

您还可以考虑将站点的安全元素移动到子域,并对其应用严格的 CSP,对开放部分采用更宽松的策略。这意味着静态内容或您确信用户无法修改或添加的内容可以通过广告/跟踪提供,而经过身份验证的部分或显示用户内容的部分可能仅限于已知域. 它并不完美,但它比允许所有主机名的开放 CSP 更好。

我希望谷歌也能读到这一点,他们应该通过提供来自 ar.images.google.com 和 be.images.google.com 的这些图像来更改 GoogleAds 和 Google Analytics,然后我们可以使用image-src: 'self' *.images.google.com. 这是因为使用当前的 CSP 标准,我们不能在 Content-Security-Policy 标头中为顶级域使用通配符,只能在主机名上使用。而对于谷歌分析来说,它看起来像是一个没有太大影响的变化。

顺便说一句:Sentry.com 提供了一个 CSP 报告网址。

您是否考虑过使用在线工具,例如report-uri

[更新]

主机通配符不合法(请参阅此规范):

每个源表达式的主机名最多可以包含一个通配符 (*),并且它必须是最左边的 DNS 标签。

您是否考虑过根据用户的地理位置为您的网页提供不同的 CSP 标头?因此,来自英国的人将获得一个允许 *.google.co.uk 的 CSP,依此类推。