tom*_*opp 4 google-chrome nonce content-security-policy
我正在尝试将nonce值添加到内联脚本中以满足更严格的CSP。但是,我遇到了一个奇怪的问题,即chrome正在从现时属性中剥离值。当我卷曲页面时,会出现现时值。这导致脚本现在无法通过CSP测试,因此无法执行。我以为这可能是由于流氓扩展引起的,但是在完全干净的chrome版本上却失败了。(OSX上的版本73.0.3683.103)随机数的值是一个随机的256位基本编码的字符串,因此它应满足随机数的所有要求。
有人知道发生了什么吗?难道我做错了什么?
问题中描述的行为实际上是预期的行为-根据HTML规范要求:
https://html.spec.whatwg.org/multipage/#nonce-attributes:attr-nonce
具有nonce内容属性的元素可通过从content属性中提取值并将其移至名为内部的槽中,从而确保仅将脚本随机数暴露给脚本(而不暴露于CSS属性选择器之类的副渠道)。
[[CryptographicNonce]]
https://html.spec.whatwg.org/multipage/#nonce-attributes:dom-noncedelement-nonce
…
nonceIDL属性的设置器不会更新相应的content属性。这以及nonce在元素成为浏览上下文连接时,将内容属性设置为空字符串的以下内容,旨在防止通过容易读取内容属性的机制(例如选择器)使现时值泄漏。
在首次在https://github.com/whatwg/html/中提出后,此行为已添加到https://github.com/whatwg/html/pull/2373规范的更新中(“隐藏nonce内容属性值”)。问题/ 2369。
需要明确的是:规范要求的行为是,如果您通过网络提供的标记源具有以下特征:
<script nonce=DhcnhD3khTMePgXw>...</script>
Run Code Online (Sandbox Code Playgroud)
…然后,如果您打开浏览器devtools并使用DOM检查器,您将看到的是:
<script nonce>...</script>
Run Code Online (Sandbox Code Playgroud)
也就是说,DOM检查器将nonce对该script元素上的属性不显示任何值。
更准确地说,如果文档带有标头,并且浏览器正在该标头中应用该策略nonce,script则该属性将没有任何价值Content-Security-Policy。
如果您没有为文档提供Content-Security-Policy标题,或者浏览器没有从中应用该策略,则会在检查器中看到nonce=DhcnhD3khTMePgXw该script元素。
因此,nonceDOM检查器中缺少该属性的值实际上表明事情正在按预期进行。也就是说,它表示浏览器正在检查nonce-*与Content-Security-Policy标题中的任何源表达式匹配的值。
它在浏览器内部的工作方式是,浏览器将nonce属性的值移动到“内部插槽”供浏览器自己使用。因此它对浏览器保持可用,但对DOM隐藏。
您尚未在其他浏览器中看到与Chrome相同的行为的原因是,其他浏览器尚未赶上规范更新并实现了要求。但是有一些开放的错误:
要检查您的浏览器是否符合规范行为,可以在此处使用测试:
在主要浏览器中这些测试的当前结果在这里:
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |