CORS漏洞学习
字数 1621 2025-08-19 12:42:32

CORS漏洞全面解析与防御指南

一、CORS基础概念

CORS(Cross-Origin Resource Sharing)是一种Web安全机制,用于控制浏览器中一个网页访问来自不同源(域名、协议或端口)资源的能力。CORS漏洞源于服务器配置不当,可能导致敏感信息泄露。

同源策略(Same-Origin Policy)

  • 定义:限制不同源之间的交互,防止恶意网站通过跨域请求获取用户敏感信息
  • 同源判定标准:协议、域名和端口完全相同
  • 限制行为
    • 跨域请求无法访问目标网站的Cookie、LocalStorage和IndexDB
    • 跨域请求无法获取目标网站的DOM元素
    • 跨域请求无法直接发送AJAX请求

二、CORS漏洞原理与利用条件

漏洞原理

当服务器未正确配置CORS规则时,攻击者可通过恶意网站的JavaScript代码,利用用户已登录受害网站的凭据,发送跨域请求获取敏感信息。

利用前提条件

  1. 服务器配置不当
    • Access-Control-Allow-Origin设置为通配符(*)或可被绕过
    • Access-Control-Allow-Credentials设置为true
  2. Cookie设置宽松
    • SameSite属性设置为None(需同时设置Secure属性,即HTTPS协议)

三、CORS漏洞四种典型场景

场景一:宽松的CORS配置

  • 漏洞配置
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Credentials: true');
    
  • 攻击方式
    攻击者网站(b.com)直接通过AJAX请求受害网站(a.com)的敏感接口
  • 防御措施
    严格限制Access-Control-Allow-Origin为可信源

场景二:不严格的源校验

  • 常见错误校验方式
    1. 前缀校验(检测是否以a.com结尾) → 可被a.com.b.com绕过
    2. 后缀校验(检测是否以a.com开头) → 可被xxxa.com绕过
    3. 包含校验(检测是否包含a.com) → 可被xxxa.com绕过
  • 防御措施
    使用严格的正则匹配或白名单机制

场景三:子域名XSS结合利用

  • 利用条件
    • 主站严格限制CORS为子域名
    • 某个子域名存在XSS漏洞
  • 攻击方式
    通过XSS在子域名植入JavaScript,发送跨域请求获取主站数据
  • 防御措施
    1. 修复子域名XSS漏洞
    2. 实施严格的CSP策略

场景四:Origin为null的利用

  • 漏洞配置
    header('Access-Control-Allow-Origin: null');
    header('Access-Control-Allow-Credentials: true');
    
  • 攻击方式
    使用iframe的sandbox属性构造Origin为null的请求:
    <iframe sandbox="allow-scripts" src='data:text/html,<script>...攻击代码...</script>'>
    
  • 防御措施
    禁止在生产环境信任null源

四、SameSite Cookie属性详解

SameSite属性控制是否随跨站点请求发送cookie,提供CSRF防护:

属性值 含义
Strict Cookie只能在第一方环境中发送
Lax (默认) 不发送跨站点请求(如img/iframe),但允许导航请求(如点击链接)
None 允许跨站点和同站点请求发送cookie(必须设置Secure属性)

安全建议:对敏感操作使用Strict,一般会话可使用Lax

五、防御措施总结

  1. 严格限制允许的源

    • 避免使用通配符(*)
    • 使用白名单机制
    • 避免不完整的前缀/后缀匹配
  2. 谨慎使用凭据

    • 除非必要,不要设置Access-Control-Allow-Credentials: true
    • 结合SameSite属性强化Cookie安全
  3. 生产环境配置

    • 禁止信任null源
    • 移除调试配置后再上线
  4. 其他安全措施

    • 实施CSRF令牌
    • 设置合适的CSP策略
    • 定期安全审计

六、示例代码分析

漏洞代码示例

// 不安全的CORS配置
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');

// 不安全的SameSite配置
ini_set('session.cookie_secure', "1");
ini_set('session.cookie_samesite', 'None');

安全配置示例

// 安全的CORS配置
$allowed_origins = ['https://trusted.example.com', 'https://subdomain.example.com'];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (in_array($origin, $allowed_origins)) {
    header("Access-Control-Allow-Origin: $origin");
    header('Access-Control-Allow-Credentials: true');
} else {
    header('HTTP/1.1 403 Forbidden');
    exit;
}

// 安全的Cookie配置
ini_set('session.cookie_secure', "1");
ini_set('session.cookie_samesite', 'Lax');  // 或 'Strict' 对于敏感操作

七、相关资源

  1. MDN CORS文档
  2. SameSite属性详解
  3. OWASP CORS安全指南

通过全面理解CORS机制及其潜在漏洞,开发人员可以更安全地配置跨域资源共享,有效防止信息泄露等安全问题。

CORS漏洞全面解析与防御指南 一、CORS基础概念 CORS(Cross-Origin Resource Sharing) 是一种Web安全机制,用于控制浏览器中一个网页访问来自不同源(域名、协议或端口)资源的能力。CORS漏洞源于服务器配置不当,可能导致敏感信息泄露。 同源策略(Same-Origin Policy) 定义 :限制不同源之间的交互,防止恶意网站通过跨域请求获取用户敏感信息 同源判定标准 :协议、域名和端口完全相同 限制行为 : 跨域请求无法访问目标网站的Cookie、LocalStorage和IndexDB 跨域请求无法获取目标网站的DOM元素 跨域请求无法直接发送AJAX请求 二、CORS漏洞原理与利用条件 漏洞原理 当服务器未正确配置CORS规则时,攻击者可通过恶意网站的JavaScript代码,利用用户已登录受害网站的凭据,发送跨域请求获取敏感信息。 利用前提条件 服务器配置不当 : Access-Control-Allow-Origin 设置为通配符(* )或可被绕过 Access-Control-Allow-Credentials 设置为true Cookie设置宽松 : SameSite 属性设置为None(需同时设置Secure属性,即HTTPS协议) 三、CORS漏洞四种典型场景 场景一:宽松的CORS配置 漏洞配置 : 攻击方式 : 攻击者网站(b.com)直接通过AJAX请求受害网站(a.com)的敏感接口 防御措施 : 严格限制 Access-Control-Allow-Origin 为可信源 场景二:不严格的源校验 常见错误校验方式 : 前缀校验(检测是否以a.com结尾) → 可被 a.com.b.com 绕过 后缀校验(检测是否以a.com开头) → 可被 xxxa.com 绕过 包含校验(检测是否包含a.com) → 可被 xxxa.com 绕过 防御措施 : 使用严格的正则匹配或白名单机制 场景三:子域名XSS结合利用 利用条件 : 主站严格限制CORS为子域名 某个子域名存在XSS漏洞 攻击方式 : 通过XSS在子域名植入JavaScript,发送跨域请求获取主站数据 防御措施 : 修复子域名XSS漏洞 实施严格的CSP策略 场景四:Origin为null的利用 漏洞配置 : 攻击方式 : 使用iframe的sandbox属性构造Origin为null的请求: 防御措施 : 禁止在生产环境信任null源 四、SameSite Cookie属性详解 SameSite属性控制是否随跨站点请求发送cookie,提供CSRF防护: | 属性值 | 含义 | |--------|------| | Strict | Cookie只能在第一方环境中发送 | | Lax (默认) | 不发送跨站点请求(如img/iframe),但允许导航请求(如点击链接) | | None | 允许跨站点和同站点请求发送cookie(必须设置Secure属性) | 安全建议 :对敏感操作使用Strict,一般会话可使用Lax 五、防御措施总结 严格限制允许的源 : 避免使用通配符(* ) 使用白名单机制 避免不完整的前缀/后缀匹配 谨慎使用凭据 : 除非必要,不要设置 Access-Control-Allow-Credentials: true 结合SameSite属性强化Cookie安全 生产环境配置 : 禁止信任null源 移除调试配置后再上线 其他安全措施 : 实施CSRF令牌 设置合适的CSP策略 定期安全审计 六、示例代码分析 漏洞代码示例 安全配置示例 七、相关资源 MDN CORS文档 SameSite属性详解 OWASP CORS安全指南 通过全面理解CORS机制及其潜在漏洞,开发人员可以更安全地配置跨域资源共享,有效防止信息泄露等安全问题。