业务逻辑越权之水平垂直越权
字数 1330 2025-08-09 17:09:29
业务逻辑越权之水平垂直越权教学文档
一、概念理解
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应用中最常见的安全问题之一,其危害性大且容易被忽视。开发人员应在设计阶段就考虑权限控制机制,测试人员应将其作为重点测试项。通过实施严格的权限验证策略和定期的安全测试,可以有效防范越权漏洞的风险。