CORS(跨域资源共享)安全漏洞与防护
字数 1488 2025-11-13 02:40:56

CORS(跨域资源共享)安全漏洞与防护

1. 知识点描述
CORS(Cross-Origin Resource Sharing)是一种允许网页从不同源(域名、协议、端口)请求资源的机制。如果配置不当,攻击者可能利用CORS机制窃取用户敏感数据或执行未授权操作。常见漏洞包括:

  • 滥用Access-Control-Allow-Origin头,导致任意域可访问资源;
  • 凭据(如Cookie)被恶意网站利用;
  • 预检请求(Preflight Request)配置错误。

2. CORS工作机制详解
步骤1:简单请求与预检请求

  • 简单请求:满足以下条件时,浏览器直接发送请求(无需预检):
    • 方法为GET、HEAD、POST;
    • 仅包含允许的头部(如Content-Typetext/plainapplication/x-www-form-urlencodedmultipart/form-data)。
  • 预检请求:非简单请求前,浏览器先发送OPTIONS请求,检查服务器是否允许跨域。

步骤2:服务器响应头关键字段

  • Access-Control-Allow-Origin:指定允许访问的源(如https://example.com*);
  • Access-Control-Allow-Credentials:是否允许发送凭据(如Cookie);
  • Access-Control-Allow-Methods:允许的HTTP方法(如GET、POST);
  • Access-Control-Allow-Headers:允许的请求头。

3. 漏洞场景与攻击手法
场景1:过度宽松的Access-Control-Allow-Origin

  • 错误配置:响应头设置为Access-Control-Allow-Origin: *,且允许凭据(Access-Control-Allow-Credentials: true)。
  • 攻击:恶意网站通过XMLHttpRequest携带用户Cookie访问目标API,窃取数据。

场景2:反射型CORS漏洞

  • 错误配置:Access-Control-Allow-Origin动态反射请求中的Origin头,未校验域名合法性。
  • 攻击:攻击者诱导用户访问恶意页面,页面发起跨域请求至目标站点,服务器错误返回Access-Control-Allow-Origin: 恶意域名

4. 防护措施
措施1:严格限制允许的源

  • 避免使用通配符*,明确指定可信域名:
    add_header Access-Control-Allow-Origin "https://trusted.com";  
    
  • 动态校验Origin头:仅当域名在白名单内时,才返回对应Access-Control-Allow-Origin

措施2:避免凭据与通配符共存

  • Access-Control-Allow-Credentials: true,则Access-Control-Allow-Origin不能为*

措施3:限制允许的方法和头部

  • 按需配置Access-Control-Allow-MethodsAccess-Control-Allow-Headers,减少攻击面。

措施4:使用Vary头避免缓存污染

  • 添加Vary: Origin,确保不同源的响应不会被错误缓存。

5. 实战检查示例

  • 安全配置:
    Access-Control-Allow-Origin: https://trusted.com  
    Access-Control-Allow-Credentials: true  
    Access-Control-Allow-Methods: GET, POST  
    Vary: Origin  
    
  • 漏洞检测工具:使用Burp Suite或浏览器开发者工具检查CORS响应头是否包含敏感信息。

6. 总结
CORS漏洞本质源于服务器对跨域请求的过度信任。通过严格校验源、限制方法/头部、避免凭据滥用,可有效防御此类攻击。

CORS(跨域资源共享)安全漏洞与防护 1. 知识点描述 CORS(Cross-Origin Resource Sharing)是一种允许网页从不同源(域名、协议、端口)请求资源的机制。如果配置不当,攻击者可能利用CORS机制窃取用户敏感数据或执行未授权操作。常见漏洞包括: 滥用 Access-Control-Allow-Origin 头,导致任意域可访问资源; 凭据(如Cookie)被恶意网站利用; 预检请求(Preflight Request)配置错误。 2. CORS工作机制详解 步骤1:简单请求与预检请求 简单请求 :满足以下条件时,浏览器直接发送请求(无需预检): 方法为GET、HEAD、POST; 仅包含允许的头部(如 Content-Type 为 text/plain 、 application/x-www-form-urlencoded 、 multipart/form-data )。 预检请求 :非简单请求前,浏览器先发送 OPTIONS 请求,检查服务器是否允许跨域。 步骤2:服务器响应头关键字段 Access-Control-Allow-Origin :指定允许访问的源(如 https://example.com 或 * ); Access-Control-Allow-Credentials :是否允许发送凭据(如Cookie); Access-Control-Allow-Methods :允许的HTTP方法(如GET、POST); Access-Control-Allow-Headers :允许的请求头。 3. 漏洞场景与攻击手法 场景1:过度宽松的 Access-Control-Allow-Origin 错误配置:响应头设置为 Access-Control-Allow-Origin: * ,且允许凭据( Access-Control-Allow-Credentials: true )。 攻击:恶意网站通过XMLHttpRequest携带用户Cookie访问目标API,窃取数据。 场景2:反射型CORS漏洞 错误配置: Access-Control-Allow-Origin 动态反射请求中的 Origin 头,未校验域名合法性。 攻击:攻击者诱导用户访问恶意页面,页面发起跨域请求至目标站点,服务器错误返回 Access-Control-Allow-Origin: 恶意域名 。 4. 防护措施 措施1:严格限制允许的源 避免使用通配符 * ,明确指定可信域名: 动态校验 Origin 头:仅当域名在白名单内时,才返回对应 Access-Control-Allow-Origin 。 措施2:避免凭据与通配符共存 若 Access-Control-Allow-Credentials: true ,则 Access-Control-Allow-Origin 不能为 * 。 措施3:限制允许的方法和头部 按需配置 Access-Control-Allow-Methods 和 Access-Control-Allow-Headers ,减少攻击面。 措施4:使用Vary头避免缓存污染 添加 Vary: Origin ,确保不同源的响应不会被错误缓存。 5. 实战检查示例 安全配置: 漏洞检测工具:使用Burp Suite或浏览器开发者工具检查CORS响应头是否包含敏感信息。 6. 总结 CORS漏洞本质源于服务器对跨域请求的过度信任。通过严格校验源、限制方法/头部、避免凭据滥用,可有效防御此类攻击。