我正在从chargebee.com加载外部脚本,并且在控制台中收到此错误消息:
[仅报告]拒绝执行内联脚本,因为它违反了 以下内容安全策略指令:“ script-src 'nonce-VVZ + V0c =''自我'https://maps.googleapis.com https://domain.chargebeestatic.com http://dgkxwewtzsnml.cloudfront.net/static/app-static-assets/hp/hp-4.8.5/”。 'unsafe-inline'关键字,哈希('sjZUY =')或随机数 (“ nonce -...”)才能启用内联执行。
我在Nginx中定义的内容安全策略是:
add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;
由于我已指定'unsafe-inline'
,所以不确定为什么会弹出此错误。
更新:
在Safari控制台中单击iframe连接器时,我可以看到:
<!DOCTYPE>
<html>
<head>
<title></title>
<script nonce="Au5oDesccjEDNeeHfk=" >window.cb_hp_cdn_path="//dgkxetzsnml.cloudfront.net/static/app-static-assets/hp/hp-4.8.5/"</script>
</head>
<body>
</body>
<script src="https://domain.chargebeestatic.com/api/internal/15346543/retrieve_init_info" nonce="Au5oejEDNGKHHfk=" ></script>
<script type='text/javascript' src='//dgkxwewtzsnml.cloudfront.net/static/app-static-assets/hp/hp-4.8.5/javascripts/vendor.js'></script>
<script type='text/javascript' src='//dgkxwewtzsnml.cloudfront.net/static/app-static-assets/hp/hp-4.8.5/javascripts/hp_connector.js'></script>
</html>
答案 0 :(得分:0)
您不能同时使用unsafe-inline
和随机数。将随机数添加到CSP后,浏览器将忽略unsafe-inline
指令。
如果您不是自己添加随机数,那么您就无法完全控制CSP,因为您的一个依赖项正在添加一个与您的依赖项合并,或者更糟的是覆盖您的依赖项。使用浏览器开发工具查看标头,以查看实际发送的标头是否与您自己的CSP相对应。您会发现他们没有。
事实上,使用unsafe-inline
作为脚本源首先抵消了拥有CSP的全部意义,因此解决此问题的最佳方法是将软件重构为也使用nonce然后将自己的随机数添加到CSP中。