对象级授权检查(BOLA)
对象级授权缺失是接口类系统最常见的问题:服务端只验证了会话有效,没有验证请求的对象是否属于当前主体。验证方式是准备两个账号,各自创建数据后交叉访问对方的对象标识,观察服务端是否拒绝。判定要结合数据敏感度,公开数据的交叉可读通常不构成越权。
基本信息
| 检查对象 | 订单、用户资料、消息、账单、文件 |
|---|---|
| 核心方法 | 两个账号交叉访问对方对象标识 |
| 验证顺序 | 读优先,写操作仅在授权下进行 |
| 标识形态 | 数字编号、随机字符串、嵌套对象标识 |
| 记录要求 | 接口、标识类型、结果分类、数据敏感度 |
典型使用场景
- 订单与工单详情接口的对象归属校验
- 用户资料与设置接口的跨账号访问
- 消息与通知接口按标识读取他人内容
- 账单与发票下载接口的归属校验
- 文件与附件接口的标识可枚举问题
验证步骤
验证步骤
# 1. 整理对象类端点清单与标识形态(数字/随机/嵌套)
# 2. 用账号 A 创建测试数据,记录其对象标识
# 3. 用账号 B 携带自身会话访问账号 A 的对象标识
# 4. 分别记录:可读 / 可写 / 已拒绝 三类结果
# 5. 写操作仅在授权允许时进行,完成后即时恢复原数据结果分类读法
| 结果 | 判定依据 | 定级参考 |
|---|---|---|
| 可读他人对象 | 返回非当前主体的数据 | 中高,取决于数据敏感度 |
| 可写他人对象 | 修改成功且返回成功状态 | 高,需评估数据完整性影响 |
| 已拒绝 | 返回权限错误或空结果 | 正常,记录为已校验 |
| 不确定 | 缓存或异步导致结果不一 | 重复验证并标注待复核 |
BOLA 覆盖所有对象类端点:列表、详情、更新、删除、批量与嵌套子接口都要检查,只测详情会遗漏大部分面。
修复视角:在数据访问层统一按当前主体过滤,而不是在每个业务方法里各自判断归属。