You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Storage安全规则疑问:未认证用户仍可通过下载链接访问文件

解决Firebase Storage规则无法限制未认证用户下载的问题

我之前也碰到过一模一样的问题,折腾了好一阵才找到根源,咱们一步步排查解决:

一、先确认规则是否真的生效了

很多时候问题出在规则没发布——你修改了规则但忘了点控制台右上角的「发布」按钮,旧规则还在生效。先检查你的规则是不是标准的结构(虽然你的写法也能工作,但标准结构更不容易出路径匹配问题):

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if request.auth != null;
      // 如果需要限制上传的话,加上下面这行
      // allow write: if request.auth != null;
    }
  }
}

修改后一定要点击「发布」,等控制台提示规则更新成功再测试。

二、排查你用的下载链接是不是带临时权限的

如果你的下载链接是之前生成的签名URL(比如通过Admin SDK或者控制台手动生成的临时链接),这类链接自带有效期(默认1小时),在有效期内不管有没有认证都能访问。要测试真实的规则限制,你需要:

  • 等旧的签名URL过期(或者直接生成一个新的、不带签名的基础链接)
  • 用基础链接测试:https://firebasestorage.googleapis.com/v0/b/你的存储桶ID/o/文件名?alt=media
    这个链接会直接触发Storage规则检查,未认证用户访问应该返回403错误。

三、检查文件有没有被设置了公开ACL权限

如果之前你手动给文件设置过公开访问权限(比如在控制台给文件加了allUsers的读权限),ACL会优先于Storage规则生效,这时候规则就形同虚设了。解决方法:

  1. 打开Firebase控制台的Storage页面,找到对应的文件
  2. 点击文件右侧的「更多」→「权限」
  3. 删除所有包含allUsers或未指定具体用户/角色的公开权限条目

四、正确的测试步骤

按这个流程测试才能确保结果准确:

  • 退出所有Google账号,打开Chrome隐身模式
  • 清空浏览器缓存(避免残留的认证信息)
  • 访问文件的基础下载链接(不带任何签名参数)
  • 如果规则生效,会直接返回403 Forbidden的错误

额外调试技巧

如果还是不行,可以给规则加个调试日志,看看请求的认证状态:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if request.auth != null && debug(request.auth);
    }
  }
}

然后去Firebase控制台的「Storage」→「规则」→「监控」里查看请求的日志,就能看到这个请求有没有携带认证信息,方便定位问题。

内容的提问来源于stack exchange,提问作者atreeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:11