CSP 生成器

生成内容安全策略头

如何使用CSP 生成器

  1. 1输入你计划允许的策略指令(default-src、script-src、img-src 等)。
  2. 2输入你信任的来源域名或协议。
  3. 3查看生成的 Content-Security-Policy 响应头,粘到服务器配置中。

构建内容安全策略(CSP)

CSP = 指令1 值1 值2; 指令2 值3; ...

CSP 将浏览器可加载脚本、样式、图片与连接的来源列入白名单,即使存在 XSS 漏洞也能阻止未授权内容注入。

建议先在 report-only(仅报告)模式下运行以记录违规,否则过严的策略会破坏站点上的合法资源。

CSP(内容安全策略)通过 HTTP 响应头告诉浏览器「只允许加载这些来源的资源」,是防御 XSS 的**纵深防御**手段。即使攻击者成功注入了脚本,如果不在白名单里,浏览器也会拒绝执行。最严格的策略是 `default-src 'none'`,然后逐项开放需要的来源。

**内联脚本是 CSP 落地的最大障碍**:默认 CSP 会禁止所有内联 <script> 和 onclick 属性。三个解决办法:① 提取到外部文件(最干净);② 用 nonce(每次响应生成随机值,<script nonce="...">);③ 用 hash(对脚本内容做 SHA-256)。`unsafe-inline` 虽然能放行内联脚本,但等于放弃了 CSP 的主要防护,应尽量避免。**建议先用 Content-Security-Policy-Report-Only 模式上线观察一段时间**,收集违规报告、调整策略后再切换为强制模式。

指令作用示例值
default-src默认资源策略(兜底)'self'
script-srcJavaScript 来源'self' 'nonce-xxx'
style-srcCSS 来源'self' 'unsafe-inline'
img-src图片来源'self' data: https:
connect-srcXHR/fetch/WebSocket'self' https://api.example.com
font-src字体来源'self' https://fonts.gstatic.com
frame-ancestors允许被谁嵌套(防点击劫持)'none'
upgrade-insecure-requests自动升级 HTTP 请求(无值)
report-uri违规上报地址/csp-report

常用 CSP 指令速查

常见问题

default-src 有什么作用?

它为所有未显式指定的指令提供兜底,因此设为 'self' 可覆盖大多数标签。

是否应先使用仅报告模式?

是,先观察上报的违规一段时间,以便在不破坏站点的前提下调整策略。

CSP 能阻止所有 XSS 吗?

它大幅降低影响,但属于纵深防御层,不能替代输入过滤。

CSP 能完全防住 XSS 吗?

不能,它是纵深防御的一环而非银弹。CSP 可以阻止外部脚本加载和大部分内联注入,但无法防御:① 已被允许的域名下的恶意脚本(如 CDN 被污染);② 通过 JSONP 端点注入;③ DOM 型 XSS 中直接操作已存在脚本的攻击。正确的防护层次是:输入验证 → 输出转义 → CSP → 定期安全审计。另外 csp 配置错误(如 script-src 包含 * 或允许 data:)反而形同虚设。

为什么加了 CSP 后第三方服务失效?

因为第三方(统计、广告、客服、地图、字体)通常要加载脚本、发起请求、嵌入 iframe,每一项都需要对应指令放行。排查方法:打开浏览器控制台,CSP 违规会打印具体被阻止的 URL 和违反的指令,按需添加即可。常见需求:Google Analytics 需要 script-src + connect-src,Google Fonts 需要 style-src + font-src,YouTube 嵌入需要 frame-src。**建议为第三方单独列出来源域名,而不是图省事用通配符。**

更多工具