这是一篇 2023 年旧站文章的整理版。案例中的业务使用短视频资源地址交付付费内容,但资源接口没有验证访问者身份,同时地址中的一段标识会随集数按 36 进制递增。
真正的问题是缺少授权判断
可预测地址只是发现问题的入口。即使 URL 完全随机,只要服务端没有确认“当前访问者是否购买了这一资源”,链接一旦泄露仍会失去保护。正确边界应当建立在服务端授权判断上。
36 进制规律暴露了资源关系
标识由 0-9a-z 组成,递增时具有普通进位规律。实现转换时需要保留原始位数,并在输出阶段补零。这个细节说明资源之间存在可以推导的关系,因此不能把地址不可见当作访问控制。
修复建议
- 每次资源请求都校验用户、订单与资源的关系;
- 使用短时签名 URL,并限制有效期与可用范围;
- 避免在地址中暴露连续业务编号;
- 对异常枚举和连续失败请求建立监控;
- 测试只在明确授权范围内进行,并向站点方报告问题。
