内容安全策略标准是否支持通配符路径?如果不是,为什么不呢?

Does the Content Security Policy Standard support wildcard paths? If not, why doesn't it?

从阅读 CSP Standard specification and examples 来看,它似乎不支持给定 URL 的路径部分中的通配符。这似乎是一种疏忽,因为许多 CDN 和静态文件托管提供商在其用户之间共享根域名,并且只区分对 URL 路径而不是整个域的访问。

例如,当使用 S3 或 Google 云存储作为 CDN 时,您可能希望 CSP 允许 scripts/assets 使用通配符 URL 从您的存储桶中加载像“https://storage.googleapis.com/my-apps-bucket/*" but disallow them for the rest of https://storage.googleapis.com,因为恶意行为者创建自己的帐户并提供来自该根域的内容是相当微不足道的。

这似乎是一个很常见的用例,我是不是误解了规范?如果不是,使用通配符路径的语法是什么,因为使用像 Content-Security-Policy: script-src 'self' https://example.com/* 这样的 header 似乎不起作用。

规范 (http://www.w3.org/TR/CSP/#match-source-expression) 的 "matching source expressions" 部分详细描述了 URL 匹配算法。它确实支持您的要求,但您不使用通配符。

规范讨论了允许来源的可选 "path-part",并说如果允许的 URL 以斜线“/”结尾,则它是前缀匹配而不是完全匹配。

因此,在您的示例中,如果您允许

https://storage.googleapis.com/my-apps-bucket/

带有斜线但末尾没有星号的,它将匹配低于 URL 的文件,例如

https://storage.googleapis.com/my-apps-bucket/file1.js