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> 等标签窃取跨域数据。本知识点涵盖其背景、工作原理、安全影响及配置方法。

二、背景与问题起源

  1. 传统同源策略(SOP)的限制:SOP仅阻止跨域读取响应内容,但某些HTML标签(如<script><img>)可发起跨域请求并接收响应,即使无法直接读取,攻击者仍可通过侧信道(如错误处理、时序分析)推断敏感信息。
  2. 历史漏洞案例:例如JSON劫持(JSON Hijacking),恶意网站通过 <script> 标签请求JSON接口,利用JavaScript数组构造函数窃取数据。
  3. 浏览器应对措施:Chrome等浏览器引入CORB(2018年),后标准化为CORP(通过HTTP响应头控制),主动阻断高风险响应传递给跨域页面。

三、CORB工作原理详解
CORB是浏览器内部机制,无需开发者配置,自动保护以下三类内容:

  1. 触发条件:当响应同时满足以下条件时,CORB会阻断数据传递给跨域页面:
    • MIME类型匹配text/htmltext/xmlapplication/jsontext/plain(当内容检测为JSON或HTML时)。
    • 跨域请求:请求来自不同源(协议、域名、端口任一不同)。
    • 敏感数据检测:浏览器通过简单语法分析(如JSON括号匹配、HTML标签检测)判断内容是否为敏感结构。
  2. 阻断过程示例
    • 攻击者页面嵌入 <img src="https://bank.com/api/user-data">,服务器返回JSON {"balance": 1000}
    • 浏览器检测到响应MIME为 application/json 且内容为有效JSON,判定为敏感。
    • CORB阻止响应数据传递到 <img> 标签,返回空响应,避免数据通过图像加载错误等侧信道泄露。
  3. 不影响合法跨域请求:CORS(跨域资源共享)明确允许的请求不受CORB影响,例如配置了 Access-Control-Allow-Origin: * 的JSON接口仍可被跨域读取。

四、CORP(跨源读取阻断)配置详解
CORP是开发者可控的HTTP响应头,用于细化资源保护策略:

  1. 响应头格式
    Cross-Origin-Resource-Policy: same-site | same-origin | cross-origin
    
    • same-origin:仅同源页面可加载此资源(最严格)。
    • same-site:允许同一站点(eTLD+1相同,如 a.example.comb.example.com)加载。
    • cross-origin:允许任意跨域加载(默认行为,无保护)。
  2. 部署示例
    • 敏感JSON API配置:
      HTTP/1.1 200 OK
      Content-Type: application/json
      Cross-Origin-Resource-Policy: same-origin
      
    • 公开资源(如图片CDN)配置:
      Cross-Origin-Resource-Policy: cross-origin
      
  3. 与其他安全头协同
    • 结合 Content-Type 正确设置MIME类型(如避免 text/plain 返回JSON)。
    • 与CORS头配合:若已设置 Access-Control-Allow-Origin,CORP作为额外防护层。

五、安全影响与绕过风险

  1. 防护范围
    • 阻止基于标签的跨域数据窃取(如 <img><script><iframe>)。
    • 缓解Spectre等侧信道攻击的部分风险(限制跨源数据加载)。
  2. 潜在绕过场景
    • MIME类型混淆:服务器错误配置 Content-Type: text/plain 返回JSON,可能绕过CORB检测(需结合内容分析)。
    • 旧浏览器兼容性:未实现CORB/CORP的浏览器仍存在风险。
  3. 误报处理:部分合法跨域资源(如公开JSONP接口)可能被阻断,需通过CORS或CORP显式放行。

六、实际应用与测试建议

  1. 开发者配置步骤
    • 识别敏感接口(如用户数据API),添加 Cross-Origin-Resource-Policy: same-origin
    • 使用工具(如浏览器开发者工具)检查响应头,验证CORP生效。
  2. 渗透测试方法
    • 尝试用 <img> 标签加载敏感接口,观察是否返回空数据或控制台警告。
    • 检测 Content-Type 是否可被篡改(如通过参数注入 ?type=html)。
  3. 兼容性考量
    CORB支持Chrome 73+、Firefox 69+;CORP支持主流现代浏览器。旧系统需降级方案(如依赖CORS + 输入验证)。

七、总结
CORB与CORP从浏览器层面填补了SOP的不足,通过主动阻断敏感数据跨域泄露,减少了侧信道攻击面。开发人员应正确配置CORP头,并与其他安全机制(如CORS、CSRF令牌)形成纵深防御。

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标签检测)判断内容是否为敏感结构。 阻断过程示例 : 攻击者页面嵌入 <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响应头,用于细化资源保护策略: 响应头格式 : same-origin :仅同源页面可加载此资源(最严格)。 same-site :允许同一站点(eTLD+1相同,如 a.example.com 和 b.example.com )加载。 cross-origin :允许任意跨域加载(默认行为,无保护)。 部署示例 : 敏感JSON API配置: 公开资源(如图片CDN)配置: 与其他安全头协同 : 结合 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的浏览器仍存在风险。 误报处理 :部分合法跨域资源(如公开JSONP接口)可能被阻断,需通过CORS或CORP显式放行。 六、实际应用与测试建议 开发者配置步骤 : 识别敏感接口(如用户数据API),添加 Cross-Origin-Resource-Policy: same-origin 。 使用工具(如浏览器开发者工具)检查响应头,验证CORP生效。 渗透测试方法 : 尝试用 <img> 标签加载敏感接口,观察是否返回空数据或控制台警告。 检测 Content-Type 是否可被篡改(如通过参数注入 ?type=html )。 兼容性考量 : CORB支持Chrome 73+、Firefox 69+;CORP支持主流现代浏览器。旧系统需降级方案(如依赖CORS + 输入验证)。 七、总结 CORB与CORP从浏览器层面填补了SOP的不足,通过主动阻断敏感数据跨域泄露,减少了侧信道攻击面。开发人员应正确配置CORP头,并与其他安全机制(如CORS、CSRF令牌)形成纵深防御。