【问题标题】:Does a *.example.com for a content security policy header also match example.com?内容安全策略标头的 *.example.com 是否也与 example.com 匹配?
【发布时间】:2021-11-12 00:51:49
【问题描述】:

假设我在mywebsite.com 上设置了此标头:

Content-Security-Policy: script-src self https://*.example.com

我知道它会允许https://foo.example.comhttps://bar.example.com,但它会单独允许https://example.com 吗?

看着the spec....

主机,例如 example.com(匹配主机上的任何资源,无论方案如何)或 *.example.com(匹配主机上的任何资源它的任何子域(及其任何子域的子域,等等))

...它似乎应该允许普通的https://example.com。但是,我发现有几个不同的网站(site 1site 2site 3site 4all 都说https://example.com 不包括在内。是哪个?

【问题讨论】:

  • 我可能有点迂腐,但example.com,而foo.example.combar.example.com主机.

标签: javascript html security content-security-policy


【解决方案1】:

引用自(旧)CSP 规范的文本是错误的 (now fixed)。引用的其他来源是正确的。

但引用的 https://www.w3.org/TR/CSP/#source-expression 部分定义了 CSP 源表达式 是什么,实际上并没有说明相关的规范要求。

实际上确实规范地定义相关要求的 CSP 规范部分是 Does url match expression in origin with redirect count 算法,在 https://www.w3.org/TR/CSP/#ref-for-grammardef-host-part-2 的子步骤中,内容如下:

  1. 如果 expression 的主机部分的第一个字符是 U+002A ASTERISK 字符 (*):

  2. remaining 成为从 表达式 中删除前导“*”的结果。

  3. 如果 remaining(包括前导 U+002E FULL STOP 字符 (.))不是最右边的 ASCII 不区分大小写的匹配 url 的主机的字符,然后返回“不匹配”。

包括前导 U+002E FULL STOP 字符 (.) 部分要求表示去掉星号后的 剩余 部分包括前导句号,因此url 的主机最右边的字符也必须以点开头才能匹配。

换句话说,如果您从*.example.com 开始并遍历算法的那部分,则首先删除* 以得到.example.com 作为剩余 部分,然后您将url 的主机最右边的字符与该字符匹配,包括前导句号。

所以https://foo.example.com 匹配,因为它的宿主部分最右边的字符匹配.example.com,但是https://example.com不匹配,因为它的宿主部分最右边的字符不匹配.example.com(因为它缺少包括句号)。


2017 年 10 月 13 日更新

不久前 I reported the problem 使用 CSP 规范,它是 now been fixed

relevant part of the CSP spec 现在改为:

主机,例如example.com(匹配主机上的任何资源,与方案无关)或*.example.com(匹配主机子域(及其任何子域的子域等)上的任何资源)

请注意,读取“匹配主机或其任何子域上的任何资源”的部分现在只是读取“匹配主机子域上的任何资源”

【讨论】:

    【解决方案2】:

    根据Mozilla's docs,如果要包含基域,则应在 CSP 标头中包含 'self'*.example.com

    【讨论】:

    • 我应该明确表示example.com 不是我的网站。所以self 将允许mydomain.com,如果我理解正确的话。我更新了我的问题以澄清。
    • 啊,好吧。在这种情况下,我仍然会坚持使用 Mozilla 的/w3 规范,其中 *.example.com 包括外国网站的域和子域。
    猜你喜欢
    • 2019-04-23
    • 2021-06-11
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多