[英]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.com
和https://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内容如下:
如果expression的主机部分的第一个字符是 U+002A ASTERISK 字符 (
*
):令剩余是从表达式中删除前导“
*
”的结果。如果剩余(包括前导 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.