提问者:小点点

Firebase存储永远不会完全私有?


我为我们的Firebase存储设置了规则,仅允许经过身份验证的用户与之交互。

rules_version = '2';

service firebase.storage {
  match /b/{bucket}/o {
    match /something/{allPaths=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

但是,当我浏览保存在Firebase控制台存储中的资产的详细信息时,我确实会为其中的每一个找到一个公开打开这些资产的链接(当我打开文件的详细信息时),例如:

https://firebasestorage.googleapis.com/v0/b/${my-project}.appspot.com/o/${my-file}?alt=media&token=49385ae5-4df6-44ef-a313-8d1f07b59111

我的猜测是这个链接是downloadURL,并且通过令牌授予公共访问权限。

因此,我理解存储内容实际上并不是完全私有的,因为即使我设置了严格的规则,即使我个人和我的应用程序没有生成下载URL,Firebase仍然会为每个文件自动生成这样的网址,因此,即使很难找到令牌,内容无论如何都是可以在线公开访问的。

我的理解是否正确?

或者我在Firebase控制台中找到的链接不是下载网址,而是一个临时链接,分别是控制台提供的过期生命令牌?

或者是否可以将Firebase存储桶设置为永远不生成任何下载链接?


共1个答案

匿名用户

任何拥有有效令牌的下载URL的人都可以从任何地方访问内容。然而,如果你从不向任何人公开URL,任何人基本上都不可能猜测URL,即使他们知道路径。令牌是随机的,包含大量熵。

如果你担心有人用正确的记号猜测这个URL,你也应该担心宇宙中两个随机原子相互碰撞。(这有点夸张,但是如果你假设记号的每个字符都是有效的十六进制数字,你可以做数学计算。)

如果您仍然偏执,并且根本不想生成任何下载URL,则必须手动撤销下载URL令牌,并使用不会创建下载URL的上传技术,并且永远不要在客户端应用程序的任何文件上调用getDownloadUrl。