我尝试让reCAPTCHA与严格的内容安全策略一起工作。这是我目前的基本版本,可以正常运行:
HTML
HTML
<script src='//www.google.com/recaptcha/api.js' async defer></script>
HTTP 头部
Content-Security-Policy: default-src 'self'; script-src 'self' www.google.com www.gstatic.com; style-src 'self' https: 'unsafe-inline'; frame-src www.google.com;
然而,我想在 style-src
部分中去掉 unsafe-inline
。在文档中,写道:
我们建议使用基于 nonce 的方法,该方法在 CSP3 中有记录。确保在 reCAPTCHA api.js 脚本标签中包含您的 nonce,我们会处理剩下的部分。
但是我无法使其工作... 这是我尝试过的:
HTML
<script src='//www.google.com/recaptcha/api.js' nonce="{NONCE}" async defer></script>
HTTP头部
Content-Security-Policy: default-src 'self'; script-src 'self' https: 'nonce-{NONCE}'; style-src 'self' 'nonce-{NONCE}'; child-src www.google.com;
这是我在 Chrome 53 上遇到的错误:
拒绝应用内联样式,因为它违反了以下内容安全策略指令:“style-src 'self' https: 'nonce-{NONCE}'”。要启用内联执行,需要使用“unsafe-inline”关键字、哈希(“sha256-MammJ3J+TGIHdHxYsGLjD6DzRU0ZmxXKZ2DvTePAF0o=”)或一个 nonce(“nonce-…”)。
我缺少什么?