内容安全策略(CSP)
字数 1166 2025-11-29 13:50:23
内容安全策略(CSP)
-
基础概念
内容安全策略是一种以HTTP响应头或<meta>标签形式实现的浏览器安全机制,用于检测和缓解特定类型的前端攻击。其核心原理是允许网站开发者通过声明策略指令,精确控制页面可加载资源的来源(如脚本、样式表、图片等),从而减少跨站脚本攻击(XSS)和数据注入攻击的风险。 -
策略指令结构
CSP策略由多个指令构成,每个指令对应一类资源类型:default-src:为未明确指定的指令提供默认来源限制script-src:控制JavaScript执行来源style-src:控制CSS样式表来源img-src:控制图像资源来源connect-src:限制XMLHttpRequest、WebSocket等连接目标- 其他指令如
font-src、media-src等覆盖特定资源类型
-
来源表达式语法
指令值使用来源表达式定义允许列表:'none':完全禁止加载该类资源'self':仅允许同源资源https::允许所有HTTPS域名example.com:允许特定域名(可含通配符*.example.com)'unsafe-inline':允许内联脚本/样式(会降低安全性)'nonce-{随机值}':通过一次性随机数允许特定内联元素'sha256-{哈希值}':通过哈希值匹配允许的内联内容
-
部署模式
CSP支持渐进式部署模式:- 仅报告模式:通过
Content-Security-Policy-Report-Only头发送策略,违规行为仅上报至report-uri指定端点而不阻塞执行 - 强制执行模式:使用
Content-Security-Policy头,浏览器会直接拦截违规资源加载 - 混合模式:可同时设置两种头部,用于测试新策略影响
- 仅报告模式:通过
-
高级防护机制
- 严格动态:通过
'strict-dynamic'配合nonce机制,允许由已信任脚本动态加载的依赖资源 - 框架祖先限制:使用
frame-ancestors指令防止点击劫持,替代陈旧的X-Frame-Options头 - 升级请求:通过
upgrade-insecure-requests指令自动将HTTP资源请求升级为HTTPS
- 严格动态:通过
-
实际应用场景
- 对抗存储型XSS:禁止内联脚本执行,仅允许经过校验的外部脚本
- 防止数据泄露:通过
form-action限制表单提交目标,阻止敏感数据发送至恶意端点 - 资源完整性保障:结合子资源完整性(SRI)哈希验证,确保外部资源未被篡改
-
策略优化实践
- 使用工具(如CSP分析器)自动提取页面资源依赖生成初始策略
- 通过浏览器开发者工具的CSP违规报告持续优化来源列表
- 采用非ce+严格动态的现代配置模式,避免维护静态域名白名单的复杂性