业务逻辑越权之水平垂直越权
字数 1330 2025-08-09 17:09:29

业务逻辑越权之水平垂直越权教学文档

一、概念理解

1. 越权访问定义

越权访问(Broken Access Control,简称BAC)是指应用程序在检查授权时存在纰漏,使得攻击者能够获得超出其权限范围的访问能力。

2. 越权分类

  • 水平越权:相同权限级别的用户之间,能够访问或操作其他用户的资源
  • 垂直越权:低权限用户能够访问或操作高权限用户的资源

二、水平越权详解

1. 典型场景

  • 用户A可以查看/修改用户B的个人信息
  • 用户A可以访问用户B的订单记录
  • 用户A可以操作用户B的账户设置

2. 常见漏洞点

  • 仅依赖前端验证,后端未做权限检查
  • 直接使用客户端提供的ID参数查询数据库
  • 会话管理不当,未绑定用户身份
  • 资源ID可预测或有规律

3. 测试方法

  1. 使用两个相同权限的测试账户
  2. 用账户A登录后,尝试访问账户B的资源
  3. 观察是否能够成功访问或修改

三、垂直越权详解

1. 典型场景

  • 普通用户能够访问管理员功能
  • 游客用户能够执行注册用户的操作
  • 低权限角色能够执行高权限角色的操作

2. 常见漏洞点

  • 功能入口未做权限控制
  • 仅依赖前端隐藏按钮/菜单
  • 权限校验逻辑存在缺陷
  • 特权API接口未做保护

3. 测试方法

  1. 使用低权限账户登录
  2. 尝试直接访问高权限功能URL
  3. 尝试修改请求参数提升权限
  4. 观察是否能够执行特权操作

四、防御措施

1. 通用防御原则

  • 实施最小权限原则
  • 默认拒绝所有访问
  • 所有请求必须经过授权检查
  • 服务器端必须验证每个请求的权限

2. 具体防御方案

  • 水平越权防御

    • 资源访问时检查当前用户是否拥有该资源所有权
    • 使用不可预测的资源ID(如UUID)
    • 实现用户-资源绑定机制
  • 垂直越权防御

    • 基于角色的访问控制(RBAC)
    • 每个功能入口进行权限验证
    • 前后端双重权限校验
    • 定期审计权限矩阵

3. 代码实现建议

  • 中间件统一处理权限验证
  • 避免直接使用客户端提供的ID
  • 使用框架提供的安全机制
  • 记录权限验证失败的日志

五、测试工具与方法

1. 手动测试

  • 修改URL参数(如user_id=123→124)
  • 修改HTTP请求方法(GET→POST/PUT/DELETE)
  • 修改Cookie或Token中的权限标识
  • 直接访问特权API端点

2. 自动化测试工具

  • Burp Suite(Scanner/Intruder模块)
  • OWASP ZAP
  • Postman(自动化测试脚本)
  • 自定义脚本(Python等)

3. 测试用例设计

  1. 正向测试:验证正常权限下的操作
  2. 反向测试:尝试越权操作
  3. 边界测试:测试权限边界条件
  4. 组合测试:结合其他漏洞(如CSRF+XSS)进行测试

六、实际案例分析

案例1:订单查看水平越权

  • 漏洞描述:通过修改order_id参数可查看他人订单
  • 修复方案:查询订单前验证当前用户是否为订单所有者

案例2:管理员功能垂直越权

  • 漏洞描述:普通用户直接访问/admin路径可进入管理后台
  • 修复方案:添加路由级权限控制,验证用户角色

七、总结

越权漏洞是Web应用中最常见的安全问题之一,其危害性大且容易被忽视。开发人员应在设计阶段就考虑权限控制机制,测试人员应将其作为重点测试项。通过实施严格的权限验证策略和定期的安全测试,可以有效防范越权漏洞的风险。

业务逻辑越权之水平垂直越权教学文档 一、概念理解 1. 越权访问定义 越权访问(Broken Access Control,简称BAC)是指应用程序在检查授权时存在纰漏,使得攻击者能够获得超出其权限范围的访问能力。 2. 越权分类 水平越权 :相同权限级别的用户之间,能够访问或操作其他用户的资源 垂直越权 :低权限用户能够访问或操作高权限用户的资源 二、水平越权详解 1. 典型场景 用户A可以查看/修改用户B的个人信息 用户A可以访问用户B的订单记录 用户A可以操作用户B的账户设置 2. 常见漏洞点 仅依赖前端验证,后端未做权限检查 直接使用客户端提供的ID参数查询数据库 会话管理不当,未绑定用户身份 资源ID可预测或有规律 3. 测试方法 使用两个相同权限的测试账户 用账户A登录后,尝试访问账户B的资源 观察是否能够成功访问或修改 三、垂直越权详解 1. 典型场景 普通用户能够访问管理员功能 游客用户能够执行注册用户的操作 低权限角色能够执行高权限角色的操作 2. 常见漏洞点 功能入口未做权限控制 仅依赖前端隐藏按钮/菜单 权限校验逻辑存在缺陷 特权API接口未做保护 3. 测试方法 使用低权限账户登录 尝试直接访问高权限功能URL 尝试修改请求参数提升权限 观察是否能够执行特权操作 四、防御措施 1. 通用防御原则 实施最小权限原则 默认拒绝所有访问 所有请求必须经过授权检查 服务器端必须验证每个请求的权限 2. 具体防御方案 水平越权防御 : 资源访问时检查当前用户是否拥有该资源所有权 使用不可预测的资源ID(如UUID) 实现用户-资源绑定机制 垂直越权防御 : 基于角色的访问控制(RBAC) 每个功能入口进行权限验证 前后端双重权限校验 定期审计权限矩阵 3. 代码实现建议 中间件统一处理权限验证 避免直接使用客户端提供的ID 使用框架提供的安全机制 记录权限验证失败的日志 五、测试工具与方法 1. 手动测试 修改URL参数(如user_ id=123→124) 修改HTTP请求方法(GET→POST/PUT/DELETE) 修改Cookie或Token中的权限标识 直接访问特权API端点 2. 自动化测试工具 Burp Suite(Scanner/Intruder模块) OWASP ZAP Postman(自动化测试脚本) 自定义脚本(Python等) 3. 测试用例设计 正向测试:验证正常权限下的操作 反向测试:尝试越权操作 边界测试:测试权限边界条件 组合测试:结合其他漏洞(如CSRF+XSS)进行测试 六、实际案例分析 案例1:订单查看水平越权 漏洞描述:通过修改order_ id参数可查看他人订单 修复方案:查询订单前验证当前用户是否为订单所有者 案例2:管理员功能垂直越权 漏洞描述:普通用户直接访问/admin路径可进入管理后台 修复方案:添加路由级权限控制,验证用户角色 七、总结 越权漏洞是Web应用中最常见的安全问题之一,其危害性大且容易被忽视。开发人员应在设计阶段就考虑权限控制机制,测试人员应将其作为重点测试项。通过实施严格的权限验证策略和定期的安全测试,可以有效防范越权漏洞的风险。