W3C 表示,在 HTML5.1 中有一个名为 nonce
的新属性,用于 style
和 script
,可以被网站的内容安全策略使用。
我搜索了一下,但最终没有明白这个属性实际上是做什么的,使用它会有什么变化?
W3C 表示,在 HTML5.1 中有一个名为 nonce
的新属性,用于 style
和 script
,可以被网站的内容安全策略使用。
我搜索了一下,但最终没有明白这个属性实际上是做什么的,使用它会有什么变化?
nonce
属性允许您“白名单”某些内联的 script
和 style
元素,同时避免使用 CSP 的 unsafe-inline
指令(这将允许所有内联的 script
和 style
),因此您仍然保留了 CSP 不允许一般内联 script
/style
的关键特性。
因此,nonce
属性是告诉浏览器特定脚本或样式元素的内联内容不是由某个(恶意的)第三方注入到文档中的,而是由控制文档所服务的服务器的人有意放置在文档中的一种方式。
Web Fundamentals 内容安全策略 文章的 如果你非常需要使用它 部分有一个很好的示例,展示了如何使用 nonce
属性,具体步骤如下:
EDNnf03nceIOfn39fn3e9h3sdfa
。这是您的nonce。script
/style
,使您的后端代码在将文档发送到网络之前插入一个nonce
属性,其值为该nonce: <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
nonce-
前缀,然后让您的后端生成CSP标题,并将其作为script-src
或style-src
源列表的值之一:Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
因此,使用一次性数字的机制是一种替代方法,而不是让您的后端生成内联script
或style
内容的哈希值,然后在CSP头中指定该哈希值的适当源列表。
nonce
属性放入文档的HTML源中,并使用相同的nonce值发送静态CSP标头。unsafe-inline
一样。
就“可使用nonce的元素”而言:CSP规范目前限制浏览器仅对script
和style
元素检查nonce。以下是规范的详细信息:
在https://w3c.github.io/webappsec-csp/#match-element-to-source-list中,查看第2步:
如果类型为“script”或“style”,并且§ 6.6.3.1 Is element nonceable?返回“Nonceable”…
在https://w3c.github.io/webappsec-csp/#is-element-nonceable中,Is element nonceable?算法本身并不仅仅检查script
/style
元素;但规范只在上述引用的部分中调用该算法,并将其限制为script
/style
。因此,如果您在任何其他元素上放置一个nonce,规范要求浏览器忽略它。
<script type="text/javascript" nonce>
和<style type="text/css" nonce>
。 - Pacerier
script
和style
吗?就像禁止热链接一样? - ata