文件权限控制

权限不是 URL 复杂度

很多系统用「很长的随机 URL」来保护文件,这是靠隐蔽换安全,不可靠:URL 一旦被分享、被爬取、被泄露,文件就暴露了。

文件权限需要明确的访问模型,并且由服务端控制。

四类访问级别

访问模型
任何人可访问公开图片、下载资源
公开CDN 长缓存,公开 URL
拥有者 / 协作者 / 指定角色合同、私密附件
私有短期签名 URL,服务端鉴权
短时间内可访问验证码图片、临时分享链接
临时过期自动失效并删除
仅审计 / 管理员可处理命中风险的被拦截文件
隔离禁止普通访问,隔离处置
权限校验发生在业务服务生成下载 URL 之前。即使文件最终由 CDN / 对象存储提供,也要由业务服务控制签名生成,而不是直接暴露存储地址。

权限校验的时机

权限校验发生在业务服务生成下载 URL 之前:

  1. 用户请求 GET /files/{file_id}。
  2. 业务服务校验用户身份、文件归属、访问级别。
  3. 通过 → 生成短期签名 URL(私有文件)或返回公开地址(公开文件)。
  4. 不通过 → 拒绝,不暴露文件地址。

即使文件最终由 CDN / 对象存储提供,也要由业务服务控制签名生成——存储层永远不直接暴露给客户端。

权限与元数据的关系

访问级别存哪里?存元数据表(access_level 字段),而不是存文件名或路径里:

file_metadata.access_level = public | private | temp | isolated

这样权限变化只需要改元数据,不需要移动文件、改 URL。

动态权限

有些文件权限会变化(如「审核通过前私有,通过后公开」):

  • 权限变化要立即生效:私有→公开,刷新或版本化;公开→私有,撤销已发签名。
  • 权限变化要有审计(谁、何时、为什么改)。

一句话

文件权限 = 明确的访问模型 + 服务端控制 + 元数据承载。URL 复杂化只是辅助,不是安全本身。

下一节看治理链路的最后一块:审计日志与风险处置。

发现内容有问题?

告诉我们哪里需要改进。