内容安全策略标头阻止允许的域

时间:2019-07-29 16:51:41

标签: wordpress content-security-policy

我正在尝试使内容安全策略在我的网站上正常运行,但是即使在应允许的情况下,我也会阻止内容。 在我的网站上使用Google的CSP Evaluator,我可以看到以下规则:

default-src 'self';
font-src 'self' fonts.gstatic.com;
img-src 'self' gstatic.com;
script-src 'self' google.com gstatic.com;
style-src 'self' google.com gstatic.com;
form-action 'self';
frame-ancestors 'self';

在禁用CPS的情况下,我向Google网站提出了各种有关字体,样式和脚本的请求(用于ReCapture),但是启用了这些请求后,这些请求均未加载(在网络负载图中查找请求)。

查看securityheaders.io的CSP,看来我对允许某些域通过没有任何错。

default-src 'self';
script-src 'self' cdnjs.cloudflare.com;
img-src 'self';
style-src 'self' 'unsafe-inline' fonts.googleapis.com cdnjs.cloudflare.com;
font-src 'self' fonts.gstatic.com cdnjs.cloudflare.com;
form-action 'self';
report-uri https://scotthelme.report-uri.com/r/default/csp/enforce

除了灯箱之外,在弹出窗口中无法显示图像的灯箱很奇怪,该站点在启用或禁用CSP的情况下外观和行为相同。我还检查了Cloudflare's guide,似乎不需要将它们启用为CDN的任何其他功能。

我使用的是Wordpress插件来管理这些标头,但是从加载网站时我可以看到标头,它们肯定在那里。

我的CSP标头显然存在问题,将阻止加载白名单的网站

2 个答案:

答案 0 :(得分:2)

在应用程序中使用内联脚本时,如果尝试同时使用CSP,则会出现这种类型的错误。如果要包括CSP来减少XSS攻击,那么您已在应用程序中删除了内联脚本。 内联脚本意味着在“ script”标签内的html文件中编写脚本。

示例:

<head>
   <script> console.log("Inline Scripting")</script>
</head>

解决方案: 1.您可以将脚本放置在单独的js文件中,然后在html文件中引用它(或) 2.如果要使用来自任何其他服务器/域的脚本文件,则可以在CSP Meta标记中指定地址,并且可以在html中引用该脚本。请参考以下示例:

<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://samplejs_website:8887/>
 <script src="https://samplejs_website:8887/index.js"></script>
</head>
<body>
</body>
</html>

注意:您可以在CSP meta标记中使用'unsafe-inline',并且可以在应用程序中包含内联脚本。但是不推荐。

答案 1 :(得分:1)

如果其中一个Google脚本存在问题,我发现它们的脚本经常加载 other 脚本,这会使CSP跳闸。请查看strict-dynamic策略。它基本上说“允许该已知脚本加载其他未知脚本”。