【问题标题】:Google Chrome Stripping nonce values from script tags谷歌浏览器从脚本标签中剥离 nonce 值
【发布时间】:2019-09-04 08:40:31
【问题描述】:

我正在尝试将 nonce 值添加到我的内联脚本中以满足更严格的 CSP。但是,我遇到了一个奇怪的问题,即 chrome 正在从 nonce 属性中剥离值。当我卷曲页面时,会出现 nonce 值。这导致脚本无法执行,因为它现在未通过 CSP 测试。我认为这可能是由于流氓扩展,但它在完全干净的 chrome 版本上失败了。 (OSX 上的版本 73.0.3683.103)nonce 的值是一个随机的 256 位基本编码字符串,因此它应该满足 nonce 的所有要求。

有人知道发生了什么吗?我是不是做错了什么?

【问题讨论】:

    标签: google-chrome content-security-policy nonce


    【解决方案1】:

    问题中描述的实际上是预期的行为——根据 HTML 规范要求:

    https://html.spec.whatwg.org/multipage/#nonce-attributes:attr-nonce

    具有 nonce content 属性的元素通过从 content 属性中提取值,将其移动到名为 @987654328 的内部槽中,确保密码 nonce 仅暴露给脚本(而不是像 CSS 属性选择器这样的侧通道) @

    https://html.spec.whatwg.org/multipage/#nonce-attributes:dom-noncedelement-nonce

    ...nonce IDL 属性的设置器不会更新相应的内容属性。这一点,以及当元素变为浏览上下文连接时将nonce 内容属性设置为空字符串的以下设置,旨在防止通过可以轻松读取内容属性的机制(例如选择器)泄露现时值。

    此行为是在 https://github.com/whatwg/html/pull/2373 规范的更新中添加的(隐藏 nonce 内容属性值);见675https://github.com/whatwg/html/issues/2369

    明确一点:规范要求的行为是,如果您通过网络提供的标记源具有:

    <script nonce=DhcnhD3khTMePgXw>...</script>
    

    ...如果你打开浏览器开发工具并使用 DOM 检查器,你会看到的是:

    <script nonce>...</script>
    

    也就是说,DOM 检查器不会显示该 script 元素上的 nonce 属性的值。

    更准确地说:如果文档使用 Content-Security-Policy 标头提供,并且浏览器在该标头中应用策略,您将不会在 script 上看到 nonce 属性的值。

    如果您提供带有Content-Security-Policy 标头的文档,或者浏览器不应用其中的策略,您将看到nonce=DhcnhD3khTMePgXw 中的script 元素检查员。

    因此,在 DOM 检查器中缺少 nonce 属性的值实际上表明事情正在按预期工作。也就是说,它表示浏览器正在检查值是否与 Content-Security-Policy 标头中的任何 nonce-* 源表达式匹配。

    它在浏览器中的工作方式是:浏览器将nonce 属性的值移动到一个“内部槽”以供浏览器自己使用。所以它对浏览器仍然可用,但对 DOM 隐藏。

    您在 Safari 中还没有看到与 Chrome 相同的行为的原因是,Safari 没有赶上规范更新并实现了要求。但是有一个open Safari bug


    要检查您的浏览器是否符合规范行为,您可以在此处使用测试:

    这些测试在主要浏览器中的当前结果在这里:

    【讨论】:

    • Mike,感谢您花时间澄清规范的行为。 (以及您与 w3c 的合作)也许您可以利用您的职位游说浏览器供应商,向开发人员提供一些反馈,表明事情正在按预期工作。我认为 nonce 旁边的绿色复选标记或其他一些视觉标记将有助于表明事情正在按预期工作。我理解为什么要这样设计背后的基本原理,但由于没有其他浏览器 API 有这样的行为,我认为这有助于在测试不同浏览器时避免进一步的混淆。
    猜你喜欢
    • 2013-08-05
    • 2023-03-09
    • 1970-01-01
    • 2015-02-02
    • 2016-06-08
    • 2014-02-15
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多