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

时间:2020-01-17 07:03:21

标签: firebase firebase-authentication google-cloud-storage firebase-storage firebase-security

我为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,并且通过token授予了公共访问权限。

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

我的理解正确吗?

或者我在Firebase控制台中找到的链接不是下载URL,而是一个临时链接,分别是控制台提供的令牌(作为有效期限)?

还是可以将Firebase存储桶设置为不生成任何下载链接?

1 个答案:

答案 0 :(得分:4)

任何人只要拥有带有有效令牌的下载URL,就可以从任何地方访问内容。但是,如果您从不向任何人公开该URL,那么即使他们知道路径,任何人也基本上不可能猜测该URL。令牌是随机的,并且包含大量的熵。

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

如果您仍然是静止偏执狂,并且根本不想生成任何下载URL,那么您将必须手动撤消下载URL令牌,并使用不支持的上传技术。还可以创建一个下载URL,并且永远不要在客户端应用程序中的任何文件上调用getDownloadUrl。