内容安全策略(CSP)的部署与绕过技术详解
字数 1792 2025-12-01 06:21:51
内容安全策略(CSP)的部署与绕过技术详解
题目描述
内容安全策略(Content Security Policy,CSP)是一种通过HTTP响应头(如Content-Security-Policy)定义的安全机制,用于限制网页中可加载的资源(如脚本、样式、图片等),从而减少XSS、数据注入等攻击的风险。面试题可能围绕以下方面展开:
- CSP的基本语法和指令(如
default-src、script-src、style-src)。 - CSP的部署方法(如何通过响应头或
<meta>标签配置)。 - 常见CSP绕过技术(如利用JSONP端点、AngularJS沙箱逃逸、域名白名单缺陷等)。
解题过程与知识点讲解
步骤1:理解CSP的核心目标
- 作用:通过白名单机制控制资源加载源,防止恶意脚本执行。例如,配置
script-src 'self'仅允许加载同源脚本。 - 关键指令:
default-src:默认策略,适用于未单独指定的资源类型。script-src:控制JavaScript的加载源(如'self'、https:、nonce-xxx)。style-src:控制CSS资源。connect-src:限制XMLHttpRequest、WebSocket等连接的目标。
步骤2:CSP的部署示例
假设需防御XSS,配置一个严格策略:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; object-src 'none';
- 解释:
script-src 'self' 'nonce-abc123':仅允许同源脚本或带nonce="abc123"属性的<script>标签执行。object-src 'none':完全禁止<object>、<embed>等插件资源。
- 部署方式:
- HTTP响应头(首选):由服务器在响应中返回。
<meta>标签(较少用):<meta http-equiv="Content-Security-Policy" content="...">。
步骤3:CSP的常见绕过技术
即使配置CSP,攻击者仍可能通过以下方式绕过:
-
利用白名单中的不安全域名
- 场景:若策略包含
script-src 'self' https://cdn.example.com,且cdn.example.com存在开放上传功能,攻击者可上传恶意脚本并通过<script src="https://cdn.example.com/malicious.js">执行。 - 防御:严格审核白名单域名的安全性。
- 场景:若策略包含
-
JSONP端点滥用
- 原理:若CSP允许
script-src包含某个提供JSONP的域名(如https://api.example.com/search?callback=alert(1)//),攻击者可构造恶意回调函数执行代码。 - 示例:
<script src="https://api.example.com/search?callback=alert(document.domain)//"></script> - 防御:禁用JSONP或严格校验回调函数名。
- 原理:若CSP允许
-
AngularJS沙箱逃逸(CSP宽松时)
- 条件:CSP允许
unsafe-eval或特定AngularJS库。 - 原理:AngularJS的模板注入可通过构造如
{{1+1}}的表达式执行代码,结合CSP缺陷实现绕过。 - 防御:避免使用
unsafe-eval,升级AngularJS版本。
- 条件:CSP允许
-
通过
<link>或CSS注入- 若
style-src配置宽松,攻击者可能通过CSS表达式(如IE的expression())或窃取数据的CSS属性(如@import)泄露信息。
- 若
步骤4:进阶防御与检测
- Nonce和Hash机制:
- Nonce:每次页面生成随机数(如
nonce-abc123),仅匹配的脚本可执行。 - Hash:对脚本内容计算哈希值(如
sha256-xxx),仅允许哈希匹配的脚本。
- Nonce:每次页面生成随机数(如
- 报告机制:通过
report-uri或report-to收集CSP违规报告,辅助排查配置问题。 - 严格模式:优先使用
default-src 'none',再按需开放具体资源类型。
总结
- CSP的有效性:依赖严格的白名单设计和避免使用
unsafe-inline、unsafe-eval等宽松指令。 - 绕过技术的根源:往往源于配置错误或对第三方服务的过度信任。
- 面试考察点:理解CSP原理、部署实践、常见绕过场景及应对措施。