内容安全策略(CSP)生成器

逐条指令构建 Content-Security-Policy,导出为响应头、meta 标签、Nginx 或 Apache 配置,并对不安全的设置给出警告。

HTTP 响应头
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
策略评估
内置检查未发现问题。
HTML <meta> 标签
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests">
frame-ancestors、report-uri、report-to 和 sandbox 在 <meta> 标签中无效,因此已从中省略——如需使用,请发送 HTTP 响应头。
Nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests" always;
Apache (.htaccess)
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
导入现有策略
建议先以仅报告模式(Content-Security-Policy-Report-Only)上线,观察浏览器控制台后再强制执行新策略。这里的检查是静态的,参照常见 CSP 评估规则,无法看到页面实际使用的脚本。

什么是 CSP 生成器?

这个 CSP 生成器帮助你编写 Content-Security-Policy,限制脚本、样式、图片、框架和其他资源可以从哪里加载。它从严格的策略开始,允许你编辑每条指令,并实时评估结果,对 'unsafe-inline'、通配符脚本来源、缺少 object-src 或 base-uri,以及未加引号的关键字等弱点发出警告。你也可以导入现有策略。

如何使用 CSP 生成器

  1. 从“严格”初始策略开始,或选择“全部清空”。
  2. 编辑每条指令的来源,例如 'self' https://cdn.example.com。
  3. 按需开启 upgrade-insecure-requests 并添加 report-uri。
  4. 查看策略评估,修复高危和中危问题。
  5. 把策略复制为 HTTP 响应头、meta 标签、Nginx 或 Apache 的一行配置;也可以导入现有策略进行分析。

示例

输入
Strict starter policy
输出
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests

严格初始策略生成的响应头。

何时使用 CSP 生成器

适合在部署之前起草或审查 CSP。新策略请先用 Content-Security-Policy-Report-Only 上线并观察违规情况,因为严格的策略会破坏你忘记允许的内联脚本和第三方小组件。检查是静态的,无法得知你的页面实际加载了哪些脚本。

CSP 生成器 的工作原理

各指令按固定顺序序列化为 name source source; …,空的会被跳过。评估使用类似 Google CSP Evaluator 的静态规则:self、none 等关键字必须加引号;script-src(或作为回退的 default-src)在没有 nonce/哈希的情况下包含 'unsafe-inline'、'unsafe-eval'、*、http:、https: 或 data: 会被标记;object-src 应为 'none';应设置 base-uri、frame-ancestors 和 form-action。meta 标签版本会省略浏览器在 meta 标签中会忽略的 frame-ancestors、report-uri、report-to 和 sandbox。

常见用例

  • 为新站点创建第一份严格的 CSP。
  • 审计从生产环境复制来的策略中的 'unsafe-inline' 和通配符。
  • 把统计或 CDN 主机正确地加入 script-src。
  • 获取某个策略对应的 Nginx add_header 完整一行。

常见问题

为什么 'unsafe-inline' 是个问题?

它允许任何内联脚本,包括通过 XSS 漏洞注入的脚本,这违背了 CSP 的主要目的。请改用 nonce 或哈希。

用响应头还是 meta 标签?

优先使用 HTTP 响应头。meta 标签不能使用 frame-ancestors、report-uri 或 sandbox,而且只对其后的内容生效。

如何在不破坏站点的情况下测试?

把同一份策略作为 Content-Security-Policy-Report-Only 发送;浏览器会在控制台报告违规,但不会阻止任何内容。

探索更多分类