直接配置csp响应头是阻断恶意代码加载最有效方式,核心是禁用内联脚本与动态执行、限定可信脚本源、启用nonce或strict-dynamic、关闭非必要资源入口、精细化控制各类资源加载,并通过report-only模式持续优化策略。

直接配置 Content-Security-Policy(CSP)响应头,是阻断恶意代码加载最有效的方式之一。核心思路是:不给不可信资源执行机会——哪怕它被注入进 HTML,浏览器也会按规则拒绝加载或执行。
明确 script-src 为防御 XSS 的关键
脚本是 XSS 攻击主要载体,script-src 必须严格限制:
- 禁用内联脚本和动态执行:去掉
'unsafe-inline'和'unsafe-eval',这两项是高风险开关 - 只允许可信来源:用
'self'锁定同源脚本,第三方 CDN 或 API 域名需显式列出,如https://cdn.example.com - 支持动态脚本时启用
'strict-dynamic',但必须配合 nonce 或哈希机制,否则无效 - 对每个请求生成唯一 nonce 值,并在 HTML 中的
<script nonce="r4nd0m123"></script>和 CSP 头中同步使用:script-src 'self' 'strict-dynamic' 'nonce-r4nd0m123'
关闭所有非必要资源入口
减少攻击面比加固更高效:
-
object-src 'none':彻底禁用 Flash、Java Applet 等插件,现代应用已无需支持 -
frame-src 'none'或frame-ancestors 'none':防止页面被嵌入到恶意 iframe 中,抵御点击劫持 -
base-uri 'self':阻止攻击者篡改<base href>导致所有相对链接跳转到恶意域名 -
form-action 'self':确保表单只能提交到当前域名,防数据外泄
精细化控制其他资源类型
图片、样式、字体、网络请求等都可能成为攻击跳板:
-
img-src 'self' data::允许同源图和 base64 图片,禁用外部图片(避免 beacon 跟踪) -
style-src 'self' 'unsafe-inline'暂可保留(部分框架依赖),但长期应替换为 nonce 或哈希方式 -
connect-src 'self' https://api.example.com:限制 fetch/AJAX/WebSocket 目标,防止敏感数据发往黑产服务器 -
font-src 'self':字体文件常被用于指纹识别或隐蔽通信,只信任自有字体
启用报告机制便于持续优化
上线初期建议先用 report-only 模式观察真实流量:
- 设置
Content-Security-Policy-Report-Only头,搭配report-to或旧式report-uri - 收集违规日志,识别误拦的合法资源(如某 CDN 脚本、埋点 SDK),再逐步收紧策略
- 正式启用后仍保留
report-uri,可及时发现绕过尝试或新出现的注入点











