【问题标题】:Firebase Storage never fully private?Firebase 存储永远不会完全私有?
【发布时间】:2020-05-04 01:26:57
【问题描述】:

我为 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 存储桶设置为不生成任何下载链接?

【问题讨论】:

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


    【解决方案1】:

    任何拥有带有有效令牌的下载 URL 的人都可以从任何地方访问内容。但是,如果您从未将该 URL 公开给任何人,那么任何人基本上都无法猜出该 URL,即使他们知道路径。令牌是随机的,并且包含大量的熵。

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

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

    【讨论】:

    • 感谢您的回答。这不是偏执与否的问题,而是数据隐私的问题。我确实理解令牌的随机性使其几乎无法猜测。话虽这么说,就是这样,我不生成任何下载 URL,因此它是正确的,Firebase 在任何情况下都会自动生成这样的 URL?还是有一个标志告诉 Firebase 在上传期间不要生成它?
    • 回答我的最后一个问题,是的,Firebase 在上传时会自动生成这样的下载 url,不,似乎没有办法避免这种情况。因此,我将此答案标记为问题的答案。是的,通过令牌文件在 Firebase 存储中始终是公开的,但由于其复杂性使得它们基本上不可能被发现。
    • 如果您使用其中一种服务器 SDK 上传文件,Firebase 不会向其附加下载令牌。如果您想向 Firebase 团队建议客户端 SDK 也应该有这样的选项,请随时向 Firebase 支持提出功能请求。 support.google.com/firebase/contact/support
    • 客户端 SDK 也不再自动生成下载 URL。他们曾经在 SDK 的初始版本中这样做,但 API 在 2018 年 5 月更改为需要显式调用。
    • 所以没有人可以猜到令牌,但仍然有人可以简单地传递下载链接,对吧?
    猜你喜欢
    • 2021-05-24
    • 2019-10-24
    • 1970-01-01
    • 2021-05-16
    • 2019-06-22
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多