Content Security Policy是否兼容?
如果在不理解hash-source
的浏览器中使用script-src: hash-source
,浏览器是否会忽略所有script-src:
甚至是所有的CSP? 或者它只会忽略hash-source
部分?
更一般地说,浏览器是否以前向兼容的方式实现CSP?
oreoshake关于向后兼容性的陈述是准确的。 确定元素匹配的过程在CSP草案标准的6.6.2.2节中描述:在存在hash-source
或nonce-source
,符合用户代理将忽略unsafe-inline
:
源列表允许给定类型的所有内联行为,前提是它包含关键字源表达式'unsafe-inline',并且不覆盖该表达式,如以下算法中所述:
[...]
如果表达式匹配nonce-source或hash-source语法,则返回“不允许”。
此外,CSP 2指定了解析具有未知令牌的源列表的过程,如下所示:
对于通过在源空间上拆分源列表返回的每个标记,如果标记与源表达式的语法匹配,请将标记添加到源表达式集。
否则,应该忽略它。 很明显,作者意图至少达到某种程度的向前兼容性。
不理解散列源元素的浏览器可能会在控制台中发出警告,但它们可能并不如此。 推荐的方法是使用用户代理嗅探来检测支持或发送'unsafe-inline'
与你的散列源值。
理解哈希源的用户代理将忽略'unsafe-inline'
而那些不会内部回退到'unsafe-inline'
用户代理。 所以它是向后兼容的。
上一篇: Is Content Security Policy forward compatible?
下一篇: Angular2 OverlayComponent not updating message variable