CORS跨域学习篇
字数 1275 2025-08-15 21:32:58
CORS跨域访问安全教学文档
一、CORS基础概念
1.1 什么是CORS
CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种用于绕过SOP(同源策略)实现跨域访问的技术。
1.2 同源策略(SOP)
- 定义:浏览器最基本的安全功能,限制不同源的客户端脚本在没有明确授权的情况下访问对方资源
- 同源条件:协议、域名、端口三者完全相同
- 限制范围:DOM访问、Cookie、Session、AJAX等操作
二、CORS工作原理
2.1 两种跨域请求方式
2.1.1 简单请求
- 浏览器直接发出CORS请求
- 自动在请求头中添加
Origin字段 - 服务器响应头包含:
Access-Control-Allow-Origin: [Origin值] Access-Control-Allow-Credentials: true
2.1.2 非简单请求(预检请求)
- 先发送OPTIONS方法的预检请求
- 请求头包含:
Origin: [请求源] Access-Control-Request-Method: [CORS请求方法] Access-Control-Request-Headers: [额外请求头字段] - 服务器检查通过后才会允许实际请求
三、CORS漏洞原理
3.1 漏洞产生原因
- 服务器配置不当
Origin源未严格校验Access-Control-Allow-Origin设置过于宽松
3.2 特殊源"NULL"
- 触发条件:网页跳转或本地HTML文件
- 风险:某些应用可能接受NULL源,可被利用
四、CORS漏洞利用
4.1 漏洞检测方法
- 修改请求头添加
Origin字段 - 检查响应头是否包含:
Access-Control-Allow-Origin: [与请求Origin相同] Access-Control-Allow-Credentials: true
4.2 常见漏洞点
- 互联网厂商API接口
- 聊天程序API接口
- 区块链厂商API
- 移动App的API
4.3 利用场景演示
- 构造恶意HTML页面
- 诱骗用户访问
- 通过CORS窃取用户敏感信息
五、CORS与CSRF对比
| 特性 | CORS漏洞 | CSRF漏洞 |
|---|---|---|
| 需要第三方网站 | 是 | 是 |
| 需要AJAX异步 | 是 | 是 |
| 需要用户登录 | 是 | 是 |
| 主要危害 | 读取敏感信息 | 执行敏感操作 |
六、防御措施
6.1 配置建议
- 避免通配符:不要设置
Access-Control-Allow-Origin: * - 严格校验Origin:精确匹配允许的域名
- 限制凭据:避免使用
Access-Control-Allow-Credentials: true - 减少允许方法:限制
Access-Control-Allow-Methods的范围
6.2 开发注意事项
- 本地开发环境与生产环境配置分离
- 线上服务器不应无条件信任本地开发请求
七、实战案例
7.1 WordPress CORS漏洞复现
- 访问首页获取
wp-json链接 - 补全URL查看JSON数据
- 添加
Origin头测试响应 - 构造恶意HTML页面进行利用
7.2 本地环境搭建
- 准备四个文件:
- 本地服务器文件:
demo1_1.html和demo2_1.php - 攻击者脚本:
demo3_1.php和sava.php
- 本地服务器文件:
- 钓鱼流程:
- 受害者访问攻击者页面
- 跳转到目标站点并携带Cookie
- 敏感数据被发送到攻击者服务器