Web 内容安全策略(CSP)
字数 1257 2025-11-22 22:22:16
Web 内容安全策略(CSP)
-
CSP 的基本定义
Web 内容安全策略(CSP)是一种通过 HTTP 响应头或<meta>标签定义的浏览器安全机制,用于限制页面可加载的资源类型(如脚本、样式、图片等),从而减少跨站脚本攻击(XSS)和数据注入攻击的风险。例如,通过 CSP 可以禁止页面执行内联 JavaScript(如<script>alert('xss')</script>)。 -
CSP 的核心指令与语法
CSP 通过指令(directives)定义资源加载规则,常用指令包括:default-src 'self':默认仅允许加载同源资源。script-src 'none':禁止所有脚本执行。img-src https::仅允许通过 HTTPS 加载图片。connect-src 'self' api.example.com:允许向同源和指定域名发起 AJAX 请求。
指令值可组合使用,例如:
Content-Security-Policy: script-src 'self' 'unsafe-inline'; style-src 'self' cdn.example.com; -
CSP 的部署方式
- HTTP 响应头(推荐):服务器返回头部字段
Content-Security-Policy。 - HTML 元标签:在
<head>中插入<meta http-equiv="Content-Security-Policy" content="script-src 'self'">,适用于无法控制服务器配置的场景。
- HTTP 响应头(推荐):服务器返回头部字段
-
CSP 的防御原理与 XSS 缓解
CSP 通过白名单机制阻断非法资源加载:- 若攻击者向页面注入
<script src="http://malicious.com/evil.js">,但 CSP 设置为script-src 'self',浏览器会拒绝加载该脚本。 - 可禁用内联事件(如
onclick)和内联样式,强制使用外部文件或哈希/随机数验证合法内容。
- 若攻击者向页面注入
-
高级策略:哈希与非ce
为平衡安全性与灵活性,CSP 支持以下方式允许特定内联资源:- 哈希(Hash):计算内联脚本的 SHA256 哈希值,例如
script-src 'sha256-abc123...'。 - 随机数(Nonce):为合法内联脚本生成一次性随机数,例如
<script nonce="R4nd0m">配合script-src 'nonce-R4nd0m'。
- 哈希(Hash):计算内联脚本的 SHA256 哈希值,例如
-
CSP 报告机制与监控
通过report-uri或report-to指令收集违规行为:- 策略模式分为
enforce(阻塞违规)和report-only(仅记录不阻塞)。 - 示例:
违规报告会以 JSON 格式发送至指定端点,供安全分析使用。Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report-endpoint;
- 策略模式分为
-
实际部署注意事项
- 逐步采用:先使用
report-only模式测试策略,避免破坏现有功能。 - 避免过度宽松:如非必要,不应使用
'unsafe-inline'或'unsafe-eval'。 - 结合其他安全机制:CSP 需与输入验证、输出编码等共同构建纵深防御体系。
- 逐步采用:先使用