内容安全政策冲突

时间:2017-10-23 13:54:41

标签: content-security-policy

我在设置CSP时遇到问题。我已连接snap.svg.js lib以在我的页面上实现动画。这个libs使我的动画有很多内联样式(对于我的svg中的每一个,大约2000+)。所以,如果我没有像这样指定'unsafe-inline'
...
"style-src 'unsafe-inline'; "
...
,我在控制台中会有很多违规行为。但我不希望在安全性方面允许内联样式。如何才允许仅显示从snap.svg.js lib生成的内联样式? 我的csp(报告仅用于测试):

$csp = "Content-Security-Policy-Report-Only: "
   . "default-src 'self' http://gc.kis.v2.scr.kaspersky-labs.com ; "

   . "font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com data:  ; "

   . "script-src  'self' 'sha256-4B8QbxkufkPFIEFoveWSoiyIpMLitEc/N9oopV9wrU4=' 'sha256-KoZvlNi6WIlva5SMPsgkZKuz3pwSCUhpugmi7saPqak=' ; "

   . "style-src 'self' https://fonts.googleapis.com ; "

   . "img-src 'self' http://1.gravatar.com ; ";
header($csp);

1 个答案:

答案 0 :(得分:0)

使用CSP 3中的随机数,您可以将信任传播到由其他脚本加载的脚本,但我不相信脚本 nonce有任何方法可以传播到样式< / em>的

您需要做的是:

  1. 更改库(eek)以将nonce添加到它添加的每个内联样式。您还必须使用nonce为CSP和生成的页面工作。这是最好的解决方案,但也是最难实施的。
  2. 为每个内联样式使用SHA哈希。这会很快变得混乱和不切实际,但是如果你只有一些可预测的内联样式,它可以让你在不进行全面的nonce实现或降低安全性的情况下逃脱。
  3. 只需使用unsafe-inline即可。显然不理想,但只要Javascript和其他活动内容被锁定,最好不要使用CSP。风格是比较危险的风格之一,但并不能真正对script-srcobject-src的危险感到不满。
  4. 哪种情况最好归结为你的情况。我首先尝试使用SHA哈希方法,然后确切地查看您需要多少哈希值。如果它们完全是在飞行中完成的,而且你已经有了几十个,那么它可能无法解决问题。

    不幸的是,我的经验是大多数第三方库都不是用CSP制作的,很难或不可能使用它。它可能是某些东西,直到图书馆/ CDN /等预计会支持CSP,我们才会继续头痛。