IDOR 越权验证是什么
IDOR(Insecure Direct Object Reference,不安全的直接对象引用)指接口用可预测或可枚举的标识直接定位资源,却没有在服务端校验该资源是否属于当前会话的主体。典型表现是:把 URL 或请求体里的订单号改成别人的编号,就能看到对方的数据。判断 IDOR 不看 ID 是否可预测——即使使用 UUID,只要缺少归属校验,同样成立。验证方法是用两个同权限测试账号交叉访问对方的对象,观察服务端返回数据、返回错误还是静默忽略。读操作优先验证,写操作需先获授权并准备回滚。
基本信息
| 风险类型 | 越权访问,对应 OWASP API Security Top 10 的 BOLA |
|---|---|
| 关注对象 | 订单、工单、发票、文件、消息、用户资料 |
| 判断标准 | 服务端是否按会话主体校验资源归属 |
| 验证方法 | 账号 A 用账号 B 的对象 ID 发起请求 |
| 操作原则 | 读操作优先;写操作需授权并记录回滚 |
典型使用场景
- 列表与详情接口:GET /orders/{id} 这类直接以 ID 取数的接口
- 文件下载:/download?fileId=… 未校验文件归属
- 消息与通知:站内信、私信接口可读他人会话
- 导出与打印:导出任务未绑定当前用户,越权拿到他人数据
- 批量接口:一次提交多个 ID 时逐个校验缺失
验证步骤
验证步骤
1. 准备两个同权限测试账号 A/B,各创建一个对象
2. 记录 A 的对象 ID 与访问接口(路径与参数结构)
3. 用 B 的会话访问 A 的对象 ID,观察响应
4. 区分三类结果:可读、可写、仅报错
5. 记录接口、请求样本与响应差异(脱敏)
6. 写操作验证后立即恢复数据并在报告注明响应结果读法
| 服务端响应 | 含义 | 结论 |
|---|---|---|
| 返回 200 且含他人数据 | 未校验归属 | 越权成立,按影响分级 |
| 返回 403 或 404 | 按会话主体校验后再取数 | 防护有效,404 优于 403 以减少信息暴露 |
| 返回空数据或占位 | 可能仅做了存在性过滤 | 需交叉验证是否真的无数据 |
| 重定向到登录页 | 会话失效或鉴权前置 | 该路径鉴权到位 |
| 返回 200 但缺业务字段 | 疑似字段级鉴权 | 可能仍有部分越权,逐字段核对 |
修复视角:服务端按会话主体校验资源归属,而不是信任客户端提交的 ID;权限判断应体现在查询条件里,而不是查出数据后再判断。
不要用真实用户数据做越权验证,会触碰隐私红线;使用自建测试账号与自建数据,验证完成后立即清理相关记录。