如何配置 Content Security Policy (CSP)
本文介绍如何为 GitLab 配置 Content Security Policy (CSP),以解决渗透测试中发现的常见安全问题。
适用场景:
- 渗透测试报告指出与 CSP 相关的问题(例如缺少指令、来源过于宽松)
- 加固 GitLab 实例的安全态势
背景
Content Security Policy (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 违规错误,这些错误可能表明功能已损坏。
GitLab 是 GitLab Inc. 的商标。
Alauda 是独立供应商。本产品与 GitLab Inc. 没有任何关联,也未获得其认可或赞助。所有商标均为其各自所有者的财产,此处仅用于标识目的。