如何配置内容安全策略(CSP)
本文介绍如何配置 GitLab 的内容安全策略(CSP),以应对渗透测试中常见的安全问题。
适用场景:
- 渗透测试报告中涉及 CSP 相关问题(例如,缺少指令、来源过于宽松)
- 加固 GitLab 实例的安全防护
背景
内容安全策略(CSP)是一种 HTTP 响应头,通过控制浏览器允许加载的资源,帮助防止跨站脚本攻击(XSS)、点击劫持及其他代码注入攻击。
GitLab 默认包含 CSP 配置,但某些指令可能过于宽松(例如允许 http: 和 https: 通配符来源),这可能会在渗透测试中被标记为风险。
前提条件
- 已根据GitLab 实例部署文档完成 GitLab 实例部署。
- 有可供参考的渗透测试结果(例如来自 OWASP ZAP)。
配置 CSP
修改 GitLab 实例 CR 配置以启用并自定义 CSP 指令。
将
http://gitlab.example.com替换为您 GitLab 实例的实际外部 URL。
指令说明
可选:移除 unsafe-eval 和 unsafe-inline
对于更严格的安全需求,可以额外从 script-src 中移除 unsafe-eval,从 style-src 中移除 unsafe-inline:
警告: 移除
unsafe-eval和unsafe-inline可能导致以下已知问题:
- 导航下拉菜单可能渲染异常(显示在页面顶部)。
- 代码片段脚本编辑功能可能无法正常使用。
请根据您的安全需求权衡利弊后再应用此配置。您可以使用
report_only: true来测试策略而不强制执行。
验证
应用配置后,等待 GitLab 实例完成重新部署,然后验证:
- 在浏览器中打开 GitLab Web 界面。
- 打开浏览器开发者工具(F12),切换到 Network 标签。
- 检查任意页面请求的响应头,确认
Content-Security-Policy头部反映了配置的指令。 - 切换到 Console 标签,查看是否有任何 CSP 违规错误提示,可能表明功能受影响。