从阅读 CSP Standard specification and examples 看来,它似乎不支持给定 URL 的路径部分中的通配符。这似乎是一个疏忽,因为许多 CDN 和静态文件托管提供商在其用户之间共享根域名,并且仅区分 URL 路径上的访问,而不是整个域。
例如,当使用 S3 或 Google Cloud Storage 作为 CDN 时,您可能希望 CSP 允许仅从带有通配符 URL(如“https://storage.googleapis.com/my-apps-bucket/ *”)的存储桶中加载脚本/ Assets ,但在 https://storage.googleapis.com 的其余部分禁止它们,如恶意行为者创建自己的帐户并提供来自该根域的内容是相当简单的。
这似乎是一个非常常见的用例,我误解了规范吗?如果没有,使用通配符路径的语法是什么,因为使用像 Content-Security-Policy: script-src 'self' https://example.com/*
这样的 header 似乎不起作用。
最佳答案
规范 ( http://www.w3.org/TR/CSP/#match-source-expression ) 的“匹配源表达式”部分详细描述了 URL 匹配算法。它确实支持您的要求,但您不使用通配符。
规范讨论了允许来源的可选“路径部分”,并说明如果允许的 URL 以斜杠“/”结尾,则它是前缀匹配而不是精确匹配。
所以,在你的例子中,如果你允许
https://storage.googleapis.com/my-apps-bucket/
带有斜杠但末尾没有星号,它将匹配该 URL 下的文件,例如
https://storage.googleapis.com/my-apps-bucket/file1.js
关于amazon-s3 - 内容安全策略标准是否支持通配符路径?如果没有,为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680150/