使用前准备
在使用CSP生成器之前,您需要了解以下基础知识:
- CSP的基本概念 — 内容安全策略通过白名单机制控制浏览器可以加载哪些资源,不符合策略的资源会被阻止
- 部署方式 — CSP可通过两种方式部署:HTTP响应头(推荐)或HTML meta标签
- 浏览器兼容性 — 主流浏览器(Chrome、Firefox、Edge、Safari)均支持CSP Level 2,IE不支持
- 测试环境 — 建议先在开发或测试环境验证CSP配置,确认无误后再部署到生产环境
快速开始:5步生成CSP策略
步骤一:选择安全等级预设
打开工具页面,首先在顶部的预设模板区域选择适合您项目的安全等级:
- 如果是新项目且安全要求高,点击「严格模式」作为起点
- 如果是现有项目首次引入CSP,建议从「宽松模式」开始,逐步收紧
- 如果需要测试但暂不生效,勾选「仅报告模式 (Report-Only)」
点击预设按钮后,下方指令配置面板会自动填充对应的默认值。
步骤二:配置布尔指令
在布尔指令区域,根据需求勾选以下选项:
- upgrade-insecure-requests — 如果您的站点同时存在HTTP和HTTPS资源,建议勾选此项,自动将HTTP请求升级为HTTPS
- block-all-mixed-content — 如果已全站启用HTTPS,勾选此项可阻止任何HTTP混合内容加载
注意:这两个指令可以同时启用,它们在安全防护上是互补关系。
步骤三:配置CSP指令
在指令配置区域,逐一设置各条CSP指令的允许来源:
- default-src — 通常设置为'self',作为所有未指定指令的默认策略
- script-src — 最关键的指令,控制脚本来源。如果需要使用内联脚本,考虑使用Nonce或hash而非'unsafe-inline'
- style-src — 控制样式来源。如果使用内联样式,同样建议使用Nonce
- img-src — 图片来源通常较宽松,可设置为*或包含CDN域名
- connect-src — 根据项目API请求目标配置,如您的后端域名、第三方API等
- frame-src — 如果页面嵌入了第三方iframe(如YouTube视频、支付页面),需在此列出域名
- frame-ancestors — 防止点击劫持,通常设为'self'或列出允许嵌入的域名
- base-uri — 强烈建议设为'self'或'none',防止URL劫持
- form-action — 限制表单提交目标,通常设为'self'
未配置的指令不会出现在最终输出中,因此只配置您需要的指令即可。
步骤四:生成Nonce(可选)
如果您的页面需要使用内联脚本或样式,建议使用Nonce机制:
- 点击「生成Nonce」按钮,工具会生成一个安全的随机字符串
- 点击「添加到script-src」,自动将nonce值添加到script-src指令中
- 复制生成的Nonce值,在您的HTML脚本标签上添加nonce属性
- 重要:Nonce值每次请求应重新生成,确保安全性
步骤五:复制输出并部署
配置完成后,在实时预览区域查看输出结果:
- HTTP响应头方式(推荐):复制Content-Security-Policy头值,配置到Web服务器中
- Nginx示例:
add_header Content-Security-Policy "策略内容" always; - Apache示例:
Header set Content-Security-Policy "策略内容" - HTML Meta标签方式:复制meta标签,粘贴到HTML的head中
常见错误与排查
页面功能异常
如果部署CSP后页面出现功能异常(如脚本不执行、样式丢失),请打开浏览器开发者工具的Console面板,查看被CSP阻止的资源信息。根据报错中的具体指令进行调整。
调试建议
建议先使用Report-Only模式测试一段时间,确认没有误报后再切换为强制执行模式。同时配置report-uri将违规报告发送到日志系统,便于持续监控。
进阶技巧
- 使用strict-dynamic — 配合Nonce使用,信任由已授权脚本动态创建的子脚本,减少对白名单的依赖
- 分环境配置 — 开发环境使用宽松策略(允许localhost),生产环境使用严格策略
- 渐进式收紧 — 从宽松模式起步,每次移除一条宽松规则,充分测试后再继续收紧
- 监控违规报告 — 通过report-uri收集的违规数据,持续优化策略配置
UD5工具箱