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-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:严格限制允许的源
- 避免使用通配符
*,明确指定可信域名: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-Methods和Access-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漏洞本质源于服务器对跨域请求的过度信任。通过严格校验源、限制方法/头部、避免凭据滥用,可有效防御此类攻击。