内联脚本违反了内容安全策略

时间:2018-11-02 16:17:49

标签: nginx content-security-policy

我正在从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>

1 个答案:

答案 0 :(得分:0)

您不能同时使用unsafe-inline和随机数。将随机数添加到CSP后,浏览器将忽略unsafe-inline指令。

如果您不是自己添加随机数,那么您就无法完全控制CSP,因为您的一个依赖项正在添加一个与您的依赖项合并,或者更糟的是覆盖您的依赖项。使用浏览器开发工具查看标头,以查看实际发送的标头是否与您自己的CSP相对应。您会发现他们没有。

事实上,使用unsafe-inline作为脚本源首先抵消了拥有CSP的全部意义,因此解决此问题的最佳方法是将软件重构为也使用nonce然后将自己的随机数添加到CSP中。