Web应用中的跨域资源泄露(CORB)与跨源读取阻断(CORP)详解
字数 2087 2025-12-13 17:02:06
Web应用中的跨域资源泄露(CORB)与跨源读取阻断(CORP)详解
一、知识点描述
跨域资源泄露(Cross-Origin Resource Disclosure,简称 CORB)和跨源读取阻断(Cross-Origin Read Blocking,简称 CORP)是浏览器安全机制,旨在防止敏感数据通过跨域请求意外泄露。它们通过阻断某些跨域响应(如JSON、HTML、XML等)的读取,防止恶意网站利用如 <script>、<img> 等标签窃取跨域数据。本知识点涵盖其背景、工作原理、安全影响及配置方法。
二、背景与问题起源
- 传统同源策略(SOP)的限制:SOP仅阻止跨域读取响应内容,但某些HTML标签(如
<script>、<img>)可发起跨域请求并接收响应,即使无法直接读取,攻击者仍可通过侧信道(如错误处理、时序分析)推断敏感信息。 - 历史漏洞案例:例如JSON劫持(JSON Hijacking),恶意网站通过
<script>标签请求JSON接口,利用JavaScript数组构造函数窃取数据。 - 浏览器应对措施:Chrome等浏览器引入CORB(2018年),后标准化为CORP(通过HTTP响应头控制),主动阻断高风险响应传递给跨域页面。
三、CORB工作原理详解
CORB是浏览器内部机制,无需开发者配置,自动保护以下三类内容:
- 触发条件:当响应同时满足以下条件时,CORB会阻断数据传递给跨域页面:
- MIME类型匹配:
text/html、text/xml、application/json、text/plain(当内容检测为JSON或HTML时)。 - 跨域请求:请求来自不同源(协议、域名、端口任一不同)。
- 敏感数据检测:浏览器通过简单语法分析(如JSON括号匹配、HTML标签检测)判断内容是否为敏感结构。
- MIME类型匹配:
- 阻断过程示例:
- 攻击者页面嵌入
<img src="https://bank.com/api/user-data">,服务器返回JSON{"balance": 1000}。 - 浏览器检测到响应MIME为
application/json且内容为有效JSON,判定为敏感。 - CORB阻止响应数据传递到
<img>标签,返回空响应,避免数据通过图像加载错误等侧信道泄露。
- 攻击者页面嵌入
- 不影响合法跨域请求:CORS(跨域资源共享)明确允许的请求不受CORB影响,例如配置了
Access-Control-Allow-Origin: *的JSON接口仍可被跨域读取。
四、CORP(跨源读取阻断)配置详解
CORP是开发者可控的HTTP响应头,用于细化资源保护策略:
- 响应头格式:
Cross-Origin-Resource-Policy: same-site | same-origin | cross-originsame-origin:仅同源页面可加载此资源(最严格)。same-site:允许同一站点(eTLD+1相同,如a.example.com和b.example.com)加载。cross-origin:允许任意跨域加载(默认行为,无保护)。
- 部署示例:
- 敏感JSON API配置:
HTTP/1.1 200 OK Content-Type: application/json Cross-Origin-Resource-Policy: same-origin - 公开资源(如图片CDN)配置:
Cross-Origin-Resource-Policy: cross-origin
- 敏感JSON API配置:
- 与其他安全头协同:
- 结合
Content-Type正确设置MIME类型(如避免text/plain返回JSON)。 - 与CORS头配合:若已设置
Access-Control-Allow-Origin,CORP作为额外防护层。
- 结合
五、安全影响与绕过风险
- 防护范围:
- 阻止基于标签的跨域数据窃取(如
<img>、<script>、<iframe>)。 - 缓解Spectre等侧信道攻击的部分风险(限制跨源数据加载)。
- 阻止基于标签的跨域数据窃取(如
- 潜在绕过场景:
- MIME类型混淆:服务器错误配置
Content-Type: text/plain返回JSON,可能绕过CORB检测(需结合内容分析)。 - 旧浏览器兼容性:未实现CORB/CORP的浏览器仍存在风险。
- MIME类型混淆:服务器错误配置
- 误报处理:部分合法跨域资源(如公开JSONP接口)可能被阻断,需通过CORS或CORP显式放行。
六、实际应用与测试建议
- 开发者配置步骤:
- 识别敏感接口(如用户数据API),添加
Cross-Origin-Resource-Policy: same-origin。 - 使用工具(如浏览器开发者工具)检查响应头,验证CORP生效。
- 识别敏感接口(如用户数据API),添加
- 渗透测试方法:
- 尝试用
<img>标签加载敏感接口,观察是否返回空数据或控制台警告。 - 检测
Content-Type是否可被篡改(如通过参数注入?type=html)。
- 尝试用
- 兼容性考量:
CORB支持Chrome 73+、Firefox 69+;CORP支持主流现代浏览器。旧系统需降级方案(如依赖CORS + 输入验证)。
七、总结
CORB与CORP从浏览器层面填补了SOP的不足,通过主动阻断敏感数据跨域泄露,减少了侧信道攻击面。开发人员应正确配置CORP头,并与其他安全机制(如CORS、CSRF令牌)形成纵深防御。