将随机数添加到破坏 'unsafe-eval' 的第 3 方代码的脚本标记
adding nonce to script tag for 3rd party code that breaks 'unsafe-eval'
我们正在使用 netlify-cms,不幸的是它发出的代码会破坏 CONTENT-SECURITY-POLICY 'unsafe-eval'
。
我尝试使用 nginx sub_filter
:
向所有脚本标签添加 nonce
属性
server {
listen 80;
set_secure_random_alphanum $cspNonce 32;
sub_filter_once off;
sub_filter_types *;
sub_filter *CSP_NONCE* $cspNonce;
sub_filter '<script' '<script nonce=\'$cspNonce\' ';
sub_filter '<link' '<link nonce="$cspNonce" ';
然后我将随机数添加到 header 也
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-$cspNonce' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' petstore.swagger.io;connect-src 'self' petstore.swagger.io";
我可以看到脚本标签中的随机数和 header 都匹配:
<script nonce='72UTQMpuXxfwcevvTydWt8XvOSzKhhjM' >
header
Content-Security-Policy default-src 'self'; script-src 'self' 'nonce-77Fdz6e1aBiGr5b8qcReeUgkO2NtJnSm'
但我仍然收到错误消息:
EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'nonce-77Fdz6e1aBiGr5b8qcReeUgkO2NtJnSm'
通过使用 'nonce-value'
,您只能删除 'unsafe-inline'
,但不能删除 'unsafe-eval'
。
'unsafe-eval'
在 Netlify 中需要将 JSON 编译成 JS 代码,但你也可以去掉 'unsafe-eval'
。只需更新 ajv-json-loader
以使用 AJV 7 和独立模式,并配置 webpack 配置以使用更新的加载程序。见实事求是 here.
我们正在使用 netlify-cms,不幸的是它发出的代码会破坏 CONTENT-SECURITY-POLICY 'unsafe-eval'
。
我尝试使用 nginx sub_filter
:
nonce
属性
server {
listen 80;
set_secure_random_alphanum $cspNonce 32;
sub_filter_once off;
sub_filter_types *;
sub_filter *CSP_NONCE* $cspNonce;
sub_filter '<script' '<script nonce=\'$cspNonce\' ';
sub_filter '<link' '<link nonce="$cspNonce" ';
然后我将随机数添加到 header 也
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-$cspNonce' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' petstore.swagger.io;connect-src 'self' petstore.swagger.io";
我可以看到脚本标签中的随机数和 header 都匹配:
<script nonce='72UTQMpuXxfwcevvTydWt8XvOSzKhhjM' >
header
Content-Security-Policy default-src 'self'; script-src 'self' 'nonce-77Fdz6e1aBiGr5b8qcReeUgkO2NtJnSm'
但我仍然收到错误消息:
EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'nonce-77Fdz6e1aBiGr5b8qcReeUgkO2NtJnSm'
通过使用 'nonce-value'
,您只能删除 'unsafe-inline'
,但不能删除 'unsafe-eval'
。
'unsafe-eval'
在 Netlify 中需要将 JSON 编译成 JS 代码,但你也可以去掉 'unsafe-eval'
。只需更新 ajv-json-loader
以使用 AJV 7 和独立模式,并配置 webpack 配置以使用更新的加载程序。见实事求是 here.