阻止远程CSS背景图像的内容安全策略

时间:2017-08-18 11:00:49

标签: css content-security-policy

我的CSP正在使用消息

阻止从远程服务器加载的背景图像
  

内容安全政策:网页设置阻止加载   自我资源("默认-src * https://xxxxx.com")。资源:   background-image:url(' https://xxxxx ....

这是我的CSP:

<meta http-equiv="Content-Security-Policy" content="default-src * https://xxxxx.com; script-src * 'unsafe-eval' 'unsafe-inline'; img-src 'self' data:">

...其中xxxxx显然是我的域名。

我认为它不像url(...,但CSP spec似乎没有考虑url()一个方案,所以我无法看到做到这一点。有人知道吗?

[UPDATE]

根据@ sideshowbarker的评论,我应该指出此调用来自内联style属性(不是标记)。

1 个答案:

答案 0 :(得分:3)

该CSP违规消息表明您具有内联CSS样式内容,因此您必须将该CSS内容移动到单独的文件(并使用link元素来引用它),否则您必须指定{{1}例如,通过向您的策略添加'unsafe-inline'指令:

style-src

原因是,问题中引用的CSP违规消息并不是说CSS样式内容中的图像是特定问题 - 它只是说你有一些内联样式内容,句号。

就CSP而言,内联样式内容无关紧要 - 只是您现有的CSP策略不允许任何内联样式内容全部;您现有的策略仅允许内联脚本,因为<meta http-equiv="Content-Security-Policy" content="default-src * https://xxxxx.com; script-src * 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' https://xxxxx.com data:"> 是您指定script-src的唯一指令。

因此,如果您要保留内联样式内容,则需要使用'unsafe-inline'来允许它。

更新:根据以下评论,在这种情况下,为'unsafe-inline'添加'unsafe-inline'后,还需要为style-src添加https://xxxxx.com {1}}。

尽管如此,一旦您最终为样式内容和脚本指定img-src,您似乎可能正处于需要开始考虑是否要指定CSP的位置政策根本 - 因为允许所有内联类型都打破了开始使用CSP政策的目的。

如果您的目标是降低XSS风险,那么您似乎应该考虑将所有内联样式和脚本内容移动到单独的文件中,并使用'unsafe-inline'<script src>来引用这些...