繁体   English   中英

内容安全策略标头的 *.example.com 是否也与 example.com 匹配?

[英]Does a *.example.com for a content security policy header also match example.com?

假设我在mywebsite.com上设置了这个标题:

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

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

规格....

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

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

根据当前的 CSP 规范,CSP 标头的*.example.com也不匹配example.com

从(旧)CSP 规范中引用的文本是错误的( 现已修复)。 引用的其他来源是正确的。


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

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

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

  2. 剩余是从表达式中删除前导“ * ”的结果。

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

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

换句话说,如果您从*.example.com开始并遍历算法的那部分,则首先删除*以获得.example.com作为剩余部分,然后匹配url的最右边的字符主持人反对,包括领先的句号。

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


2017-10-13 更新

不久前,我报告了 CSP 规范的问题现在已修复

CSP 规范的相关部分现在为:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM