标准答案

  1. 签发前检查用户是否能操作目标对象,并由服务端生成不可预测的对象键,避免客户端任意覆盖他人文件。
  2. 签名应限制上传或下载方法、对象路径、过期时间、Content-Type、大小或校验摘要等条件。
  3. 上传完成后服务端要重新读取元数据或做病毒扫描、内容校验和状态确认,不能只相信客户端声明。
  4. 下载 URL 有效期应尽可能短,敏感文件可改用服务端代理、一次性令牌或额外审计。

题目解析

预签名 URL 本质是临时能力凭证,签发前仍要完成用户、租户、对象和业务状态校验。它应绑定具体对象、HTTP 方法和有效期,避免成为任意路径的永久写权限。

大小、Content-Type 和摘要等请求条件可以减少误用,但不能完全证明文件安全。上传完成后还要读取实际元数据、做病毒或内容检查,并将对象状态从 pending 更新为可用。

下载 URL 的有效期要匹配业务风险,敏感文件可以使用短期、一次性或服务端代理并记录审计。URL 泄露后,在有效期内的权限无法靠客户端隐藏来撤销。

常见误区

  • 误区:签发一个可写任意路径的 URL。改正:服务端生成不可预测对象键,并把方法、路径、租户和过期时间绑定进签名。
  • 误区:只限制文件扩展名。改正:校验实际 MIME、大小、摘要和内容安全,扩展名只能作为提示。
  • 误区:上传完成后不更新业务状态。改正:通过回调或服务端确认将 pending 对象转为可用,失败时进入清理或重试。

作者信息