fix(P1): 成片库越权漏洞修复-全链路加user_id校验 #573
Reference in New Issue
Block a user
Delete Branch "fix/p1-video-library-authz"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
成片库按用户维度改造只加了列表页的user_id过滤,单条查询和写操作全部没有校验,存在水平越权:
修复
全链路加user_id校验:
向后兼容
user_id为None时不过滤,保持原有行为,不影响内部调用和测试。
🚀 预览环境已部署
LGTM
86e320d896to166f982b91166f982b91tocc9e7dd25acc9e7dd25ato2162f1c9f3代码审查结果 - PR #573
⚠️ 问题(1个需要修改)
batch_delete_videos函数缺少对request.video_ids数量的上限校验batch_download_videos函数(第188行附近)明确限制了单次批量操作最多50个视频(if len(request.video_ids) > 50),但batch_delete_videos函数缺少此校验。这可能导致用户一次性请求删除海量ID,引发数据库压力过大或DoS攻击。batch_download_videos的实现,在函数开头添加if len(request.video_ids) > 50: raise HTTPException(...)。💡 建议(3个可选)
tests/integration中的 Stub 实现使用了**kwargs忽略了user_id参数,单元测试也仅验证了user_id=None的情况。建议添加测试用例模拟 UserA 尝试访问/删除 UserB 的视频,确保返回 404 而非成功。delete_video函数中先通过GetGeneratedVideoUseCase查询,再调用repo.delete。虽然逻辑正确(为了获取 OSS 路径),但这产生了两次数据库查询。如果性能敏感,可以考虑在 Repository 层实现get_and_delete原子操作,或者接受当前的冗余以换取代码清晰度。update_review_status等方法在model is None时返回None,上层统一抛出 404。这种“隐式地通过 404 掩盖 403(无权访问)”的做法在安全上是可接受的(防止枚举ID),但如果业务需要区分“资源不存在”和“无权访问”,可能需要调整返回值或异常类型。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 11:36:09 | 模型:
2162f1c9f3tof0035296b2CI全绿,自动审批通过。
CI全绿,自动审批通过。