垂直越权检查
垂直越权指低权限角色能访问本来只属于高权限角色的功能,例如普通用户直接调用管理后台接口、修改系统配置、管理其他账号。判断的关键在服务端:只有服务端在该接口上独立做权限校验并返回 403 或 401,才算防护有效;前端隐藏菜单、按钮置灰都不构成防护。验证方法是先用管理员会话记录高权限接口的请求结构与参数,再换成低权限会话重放同一请求,对比响应。还要覆盖角色继承与多角色叠加场景,以及权限被回收后旧令牌是否仍然可用。
基本信息
| 风险类型 | 垂直越权,对应 OWASP API Security Top 10 的 BFLA |
|---|---|
| 关注对象 | 管理后台接口、配置修改、用户管理、审批操作 |
| 验证方法 | 低权限会话直连高权限接口 |
| 判据 | 服务端返回 403 或 401 才算防护有效 |
| 补充场景 | 多角色叠加、权限回收后旧令牌是否失效 |
典型使用场景
- 管理后台接口:普通用户直接调用用户管理类接口
- 配置修改:系统参数、字典与模板配置的读写接口
- 审批操作:绕过审批流直接执行终态操作
- 数据导出:导出全量数据的高权限接口
- 角色变更:低权限账号自行提权或改角色
验证步骤
验证步骤
1. 用管理员会话记录高权限接口的请求(路径与参数)
2. 换成低权限账号会话重放同一请求
3. 观察:成功 / 权限错误 / 重定向登录页
4. 对角色继承与多角色场景分别验证
5. 记录响应差异与请求样本(脱敏)响应与结论
| 响应 | 含义 | 结论 |
|---|---|---|
| 返回业务数据或操作成功 | 接口未做权限校验 | 越权成立,按影响分级 |
| 返回 403 | 服务端做了权限校验 | 防护有效 |
| 重定向到登录页 | 会话鉴权前置 | 鉴权到位,但要注意接口层是否一致 |
| 返回 200 空数据 | 可能仅过滤了数据 | 需确认是否仍可执行写操作 |
| 接口不存在 | 路径受保护或未部署 | 换其他等价接口继续核对 |
修复视角:鉴权在服务端按接口粒度执行,权限点与角色解耦并集中管理;前端隐藏只能提升体验,不能算安全措施。
用管理员令牌在浏览器里做测试,得到的现象不可信;必须用低权限账号的会话发起请求,才反映真实鉴权行为。