下载接口为什么容易越权
下载接口通常用一个标识符指向文件(订单号、附件 ID、路径参数),如果服务端只用这个标识符取文件而不再核对当前会话是否有权访问,把 ID 换成别人的就能拿到他人文件。另一类问题是临时链接:链接本身带签名但可长期复用、或签名只校验了存在性没有绑定文件与有效期。检查分鉴权与路径处理两条线。
基本信息
| 检查对象 | 附件下载、发票导出、报表生成、图片与文档预览接口 |
|---|---|
| 检查方法 | 双账号交叉访问、参数变形(只读操作) |
| 判定标准 | 服务端按会话主体校验归属,越权请求被拒绝 |
| 修复方向 | 以服务端对象引用取文件,临时链接带签名与时效 |
典型使用场景
- 附件与资料下载接口的越权回归验证
- 发票与对账单导出功能的权限核查
- 临时链接与分享链接的安全设计评审
- 云存储直链暴露风险评估
- 为修复方提供统一的对象级授权改造建议
验证步骤
验证步骤
1. 账号 A 生成下载链接,记录完整 URL 与参数
2. 用账号 B 的会话访问同一链接,观察是否被拒绝
3. 对文件标识参数做变形(递增、编码、路径拼接),观察服务端处置(只读)
4. 检查临时链接的签名、有效期与是否与文件绑定
5. 记录接口、变形方式、响应差异与影响面(可读取的文件范围)问题类型与判据
| 问题类型 | 判据 | 后果 |
|---|---|---|
| 对象越权 | 换 ID 即可下载他人文件 | 批量数据泄露 |
| 路径穿越 | 路径参数可跳出允许目录 | 读取服务器任意文件 |
| 临时链接复用 | 链接长期有效且与账号无关 | 链接外流后无法回收 |
| 直链暴露 | 对象存储直链无签名可访问 | 绕过应用层全部鉴权 |
| 批量下载 | 接口支持一次取多个 ID | 越权一次获取大量数据 |
证据留存要克制:确认越权后立即停止,不要下载真实他人文件来做证明;用响应头差异或错误提示差异说明问题即可。
使用对象存储时推荐由应用签发短期有效的签名 URL,并把文件访问权限设为私有,避免对象名可枚举导致的批量下载。