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 非简单请求(预检请求)

  1. 先发送OPTIONS方法的预检请求
  2. 请求头包含:
    Origin: [请求源]
    Access-Control-Request-Method: [CORS请求方法]
    Access-Control-Request-Headers: [额外请求头字段]
    
  3. 服务器检查通过后才会允许实际请求

三、CORS漏洞原理

3.1 漏洞产生原因

  • 服务器配置不当
  • Origin源未严格校验
  • Access-Control-Allow-Origin设置过于宽松

3.2 特殊源"NULL"

  • 触发条件:网页跳转或本地HTML文件
  • 风险:某些应用可能接受NULL源,可被利用

四、CORS漏洞利用

4.1 漏洞检测方法

  1. 修改请求头添加Origin字段
  2. 检查响应头是否包含:
    Access-Control-Allow-Origin: [与请求Origin相同]
    Access-Control-Allow-Credentials: true
    

4.2 常见漏洞点

  • 互联网厂商API接口
  • 聊天程序API接口
  • 区块链厂商API
  • 移动App的API

4.3 利用场景演示

  1. 构造恶意HTML页面
  2. 诱骗用户访问
  3. 通过CORS窃取用户敏感信息

五、CORS与CSRF对比

特性 CORS漏洞 CSRF漏洞
需要第三方网站
需要AJAX异步
需要用户登录
主要危害 读取敏感信息 执行敏感操作

六、防御措施

6.1 配置建议

  1. 避免通配符:不要设置Access-Control-Allow-Origin: *
  2. 严格校验Origin:精确匹配允许的域名
  3. 限制凭据:避免使用Access-Control-Allow-Credentials: true
  4. 减少允许方法:限制Access-Control-Allow-Methods的范围

6.2 开发注意事项

  • 本地开发环境与生产环境配置分离
  • 线上服务器不应无条件信任本地开发请求

七、实战案例

7.1 WordPress CORS漏洞复现

  1. 访问首页获取wp-json链接
  2. 补全URL查看JSON数据
  3. 添加Origin头测试响应
  4. 构造恶意HTML页面进行利用

7.2 本地环境搭建

  1. 准备四个文件:
    • 本地服务器文件:demo1_1.htmldemo2_1.php
    • 攻击者脚本:demo3_1.phpsava.php
  2. 钓鱼流程:
    • 受害者访问攻击者页面
    • 跳转到目标站点并携带Cookie
    • 敏感数据被发送到攻击者服务器

八、参考资源

  1. CORS跨域资源共享详解
  2. CORS漏洞分析与防御
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 字段 服务器响应头包含: 2.1.2 非简单请求(预检请求) 先发送OPTIONS方法的预检请求 请求头包含: 服务器检查通过后才会允许实际请求 三、CORS漏洞原理 3.1 漏洞产生原因 服务器配置不当 Origin 源未严格校验 Access-Control-Allow-Origin 设置过于宽松 3.2 特殊源"NULL" 触发条件:网页跳转或本地HTML文件 风险:某些应用可能接受NULL源,可被利用 四、CORS漏洞利用 4.1 漏洞检测方法 修改请求头添加 Origin 字段 检查响应头是否包含: 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 敏感数据被发送到攻击者服务器 八、参考资源 CORS跨域资源共享详解 CORS漏洞分析与防御