修复网站缺失内容安全策略(CSP)的完整指南

本文详细介绍了如何为网站配置Content-Security-Policy安全头部,包括检测现有策略、识别可信资源源、在Apache中配置CSP规则以及测试验证的全过程,帮助提升网站安全性。

如何修复网站缺失的内容安全策略

内容安全策略是什么?

内容安全策略(Content-Security-Policy)是一个安全头部,可以(且应该)包含在网站服务器与客户端的通信中。当用户访问您的网站时,头部用于客户端和服务器交换有关浏览会话的信息。这通常都是在用户不知情的情况下在后台完成的。其中一些头部可以改变用户体验,而另一些(如内容安全策略)则会影响Web浏览器如何处理网页上加载某些资源(如CSS文件、JavaScript、图像等)的方式。

内容安全策略告诉Web浏览器哪些资源位置被Web服务器信任并且可以加载。如果通过中间人攻击(MiTM)或动态代码将来自不受信任位置的资源添加到网页中,浏览器将知道该资源不受信任,并且无法处理该资源。

检查是否已启用内容安全策略

如果您以前没有听说过这些头部,那么可能没有启用它们。它们不是自动启用的。快速检查的方法是访问www.securityheaders.io并扫描您的网站。您也可以在FireFox的开发人员控制台中进行检查。

识别您的可信来源

在我们的案例中,我们需要识别可信的资源来源。使用FireFox的“开发人员模式”很容易做到这一点。我们加载了我们的网页,设置了内容安全策略,并查看了开发人员面板中的控制台产生了多少错误。每个错误都是对我们内容安全策略的违反。我们使用这些信息在策略中包含其他来源,直到所有内容都正确加载。

与您的Web开发人员协商,因为他们可能能够为您提供应受信任的所有源位置的列表。

在Apache中创建和配置内容安全策略

我们需要添加的头部将添加到httpd.conf文件中(或者apache.conf等)。

在httpd.conf中,找到您的VirtualHost部分。

接下来,找到您的<IfModule headers_module>部分。如果它不存在,您需要创建它并添加我们的特定头部。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<VirtualServer>

~一些重要的内容在这里~

    <IfModule headers_module>

    RequestHeader set X-HTTPS 1

Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' www.blackhillsinfosec.com fonts.googleapis.com;"

</IfModule>

~更多重要的内容~

</VirtualServer>

重启Apache

1
Sudo service apache restart

测试更改!

哇,看起来我们还有一些需要信任的来源。注意高亮显示的部分。

使用更多来源更新该头部设置

1
Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' www.blackhillsinfosec.com fonts.googleapis.com fonts.static.com www.google-analytics.com;"

更改后不要忘记重新启动Apache。

很快,您将使用内容安全策略和可信来源正确配置您的页面。请注意,刷新后FireFox开发人员控制台中的资源错误现已清除。

头部设置内容安全策略

Scott Helme @Scott_Helme 进行了大量研究,并帮助为Web开发人员全面实施内容安全策略铺平了道路。以下是Scott整理的一些优秀内容,以帮助正确实施内容安全策略。

内容安全策略介绍 - 链接:https://scotthelme.co.uk/content-security-policy-an-introduction/

内容安全策略备忘单 - 链接:https://scotthelme.co.uk/csp-cheat-sheet/

即将推出:配置引用策略!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计