【发布时间】:2021-04-17 22:47:42
【问题描述】:
在内容安全策略的上下文中,如果元素具有相应策略中指定的nonce 属性,则可能会从策略中排除这些元素。
显然这适用于某些 HTML 元素,例如<script nonce="..."> 和 <style nonce="..."。然而,对于某些人来说,它不起作用,例如<iframe nonce="..." >。
MDN Documentation中写着提示:
注意: CSP
nonce源只能应用 nonceable 元素(例如<img>元素没有nonce属性,没有办法将其与此 CSP 源相关联)。
是否有完整的不可行元素列表?
MDN 列出了脚本和样式标签的nonce 属性。另一方面,nonce 属性 not 为 <link> 元素列出,但仍然有效。还有更多这样的元素吗?
附带问题:为什么 <img> 和 <iframe> 不是不可识别的?
【问题讨论】:
-
二进制文件太昂贵,无法检查 nonce 合规性。此外,一些浏览器在检测到连接速度较慢时会提供质量降低的图像版本。显然,这些不符合指定的随机数。
-
根据This Q&A 看来只有
Script/Style元素是不可取的,并且随着这个问题的观众和赞成票的数量,我希望如果它不是真的有人会现在已经注意到并发表了评论..... -
CSP 规范要求 UA 仅检查
script和style元素的随机数。在w3c.github.io/webappsec-csp/#match-element-to-source-list 的算法中,请参见第 2 步:如果类型是“脚本”或“样式”,以及 §6.6.3.1 元素是否不可确定?返回“Nonceable”... 在w3c.github.io/webappsec-csp/#is-element-nonceable,Is element nonceable? 算法本身不仅仅检查script和style元素——但目前规范只调用script&style元素的算法。因此,如果您在任何其他元素上放置随机数,规范要求浏览器忽略它
标签: html attributes content-security-policy nonce