ata*_*ata 96 html html5 attributes nonce content-security-policy
W3C说,有在HTML5.1一个新的属性称为nonce
的style
和script
可以通过一个网站的内容安全策略中使用.
我搜索了它,但最终没有得到它实际上这个属性做什么和使用它时会发生什么变化?
sid*_*ker 147
该nonce
属性使您能够将某些内联script
和style
元素"白名单" ,同时避免使用CSP unsafe-inline
指令(允许所有内联script
/ style
),这样您仍然可以保留禁止内联script
/ style
一般的关键CSP功能.
因此该nonce
属性是告诉浏览器特定脚本或样式元素的内联内容未被某些(恶意)第三方注入到文档中的方式,而是由控制服务器的任何人故意将文档放入文档中从.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it提供了如何使用该nonce
属性的一个很好的示例,该属性归结为以下步骤:
对于Web服务器为特定文档接收的每个请求,让后端从加密安全随机数生成器生成至少128位数据的随机base64编码字符串; 例如,EDNnf03nceIOfn39fn3e9h3sdfa
.那是你的现时.
获取在步骤1中生成的随机数,对于任何内联script
/ style
您想要"白名单",使您的后端代码nonce
在通过网络发送之前在文档中插入属性,并将该随机数作为值:
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
Run Code Online (Sandbox Code Playgroud)获取步骤1中生成的nonce,nonce-
在其前面添加,并使后端生成一个CSP头,其中包含源列表的值,script-src
或者style-src
:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Run Code Online (Sandbox Code Playgroud)因此,使用随机数的机制是替代,而是让后端生成内联script
或style
您想要允许的内容的哈希值,然后在CSP头中的相应源列表中指定该哈希值.
请注意,因为浏览器不能(不能)检查发送的现时值是否在页面请求之间发生变化,所以可以 - 尽管完全不可取 - 跳过上面的1而不让你的后端为nonce动态做任何事情,在这种情况下你可以将nonce
具有静态值的属性放入文档的HTML源代码中,并发送具有相同nonce值的静态CSP头.
但是你不想以这种方式使用静态随机数的原因是,它几乎完全违背了使用随机数的全部目的 - 因为,如果你要使用这样的静态随机数,那时你可能只是在使用unsafe-inline
.