Javascript 内容安全策略标题的*.example.com是否也与example.com匹配?
假设我在Javascript 内容安全策略标题的*.example.com是否也与example.com匹配?,javascript,html,security,content-security-policy,Javascript,Html,Security,Content Security Policy,假设我在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(,与主机上的任何资源或其任何子域匹配)(及其
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
。然而,我发现了几个不同的网站(,)都说https://example.com
不包括在内。这是哪一个?根据,如果要包括基本域,您应该在CSP标题中包括'self'
以及*.example.com
。从(旧的)CSP规范中引用的文本是错误的(现在已修复)。引用的其他来源是正确的
但所引用的定义CSP源代码表达式的部分实际上并没有说明相关的规范性要求
相反,CSP规范中实际规范性定义相关要求的部分是算法,在子步骤中,其内容如下:
*
):
*
”的结果
)不是最右边字符的ASCII不区分大小写匹配
url
的主机的字符,然后返回“不匹配”
)的部分表示删除星号后的剩余部分包含前导句号,因此url
主机的最右边字符也必须以点开头,以便与之匹配
换句话说,如果您从*.example.com
开始,并遍历该部分算法,则首先删除*
,将.example.com
作为剩余部分,然后将url
主机的最右边字符与之匹配,包括前面的句号
所以https://foo.example.com
匹配,因为其主机部分最右边的字符匹配.example.com
,但https://example.com
不匹配,因为它的主机部分最右边的字符不匹配.example.com
(因为它缺少包含的句号)
2017-10-13更新 一段时间前,CSP规范和它的 现在的案文如下: 主机,如
example.com
(匹配主机上的任何资源,无论方案如何)或*.example.com
(匹配主机子域上的任何资源(及其任何子域的子域,等等))
请注意,读到“匹配主机或其任何子域上的任何资源”的部分现在只读到“匹配主机子域上的任何资源”。我应该明确指出,
example.com
不是我的网站。因此,如果我正确理解了所有内容,self
将允许mydomain.com
。我更新了我的问题来澄清。啊,好的。在这种情况下,我仍然坚持使用Mozilla的/w3规范,其中*.example.com包括外国网站的域和子域。我可能有点迂腐,但example.com
是一个域,而foo.example.com
和bar.example.com
是主机。