我们使用的是netlify-cms,不幸的是它会释放破坏内容安全策略'unsafe-eval'的代码。
我尝试过使用nginx nonce向所有脚本标记添加sub_filter属性。
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" ';然后,我还将这个名添加到标题中。
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";我可以看到,脚本标记和标题中的非see都匹配:
<script nonce='72UTQMpuXxfwcevvTydWt8XvOSzKhhjM' >标题
Content-Security-Policy default-src 'self'; script-src 'self' 'nonce-77Fdz6e1aBiGr5b8qcReeUgkO2NtJnSm'但我仍然收到错误信息:
EvalError:拒绝将字符串计算为JavaScript,因为在以下内容安全策略指令中,‘不安全-eval’是不允许的脚本来源:" script -src 'self‘nonce-77Fdz6e1aBiGr5b8qReeUgO2NtJnSm’
发布于 2021-12-02 20:48:58
通过使用'nonce-value',您只可以摆脱'unsafe-inline',但不能摆脱'unsafe-eval'。
Netlify中的'unsafe-eval'需要将JSON编译成JS代码,但是您也可以去掉'unsafe-eval'。只需更新ajv-json-loader使用AJV 7和独立模式,并配置webpack配置使用更新的加载程序。见nitty-gritty 这里.
https://stackoverflow.com/questions/70201515
复制相似问题