读取 Firebase 存储映像安全规则

Posted

技术标签:

【中文标题】读取 Firebase 存储映像安全规则【英文标题】:Reading firebase storage image security rules 【发布时间】:2021-09-21 20:10:03 【问题描述】:

我正在使用 Firebase 存储和具有 Flutter 的 Firestore, 我遇到了两个检索 Firebase 存储映像的选项

    在 Firestore 数据库中设置 Firebase 存储图像 url,然后使用网络图像获取它

    直接从 Firebase 存储中获取图片 url

我对令牌了解不多。 我的安全规则规定只有身份验证用户才能读取我的 Firebase 存储,但如果我使用第一个选项,我的带有令牌的图像 url 将使用该 url 存储在我的 firestore 数据库中,任何人都可以访问我的存储。我不确定 Firebase 是否会自动刷新它的存储令牌,如果是这种情况,我的应用会崩溃。 哪种方式最安全、最持久,或者如果有其他安全方式来获取图像,请回答

【问题讨论】:

你能说出这是什么图片吗?只能由所有者或任何人访问吗? 只有经过身份验证的用户才能访问 【参考方案1】:

Firebase 存储令牌不会过期,除非您将其撤消。如果您覆盖图像(即更新它),令牌可能会更新。现在,如果您想发出单独的请求以获取下载 URL 或在上传图像时将 URL 存储在实时数据库中并与其他数据一起获取,那么这完全是您的选择。

Firebase 存储的安全规则将阻止未经身份验证的用户仅获取下载 URL。如果经过身份验证的用户与任何人共享 URL,他们将能够看到图像,因为他们现在拥有带有该随机令牌的 URL。

如果您从实时数据库获取的数据首先需要用户登录,那么我只需将 URL 存储在数据库本身中,因为我认为发出另一个请求并拥有Firebase 存储的相同规则。我不知道您的确切用例,因此可能会有例外情况。

如果您并不总是需要该图像 URL,那么这可能会浪费带宽,那么您应该考虑发出单独的请求以获取存储 URL。

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

这些规则将允许任何经过身份验证的用户请求 URL。但正如我之前提到的,任何知道此链接的人都可以访问该文件。

【讨论】:

我使用的是firestore而不是实时数据库 @Noobdeveloper 同样适用于 Firestore。您的规则是否在那里检查用户是否经过身份验证?然后就好了。 如何在 Flutter 中从客户端撤销令牌假设如果我的用户想要保存但取消发布帖子或图像,他们只是调用撤销令牌,问题是什么是最快和最便宜的方法来做到这一点

以上是关于读取 Firebase 存储映像安全规则的主要内容,如果未能解决你的问题,请参考以下文章

用于 uid 列表的 Firebase 存储自定义元数据安全规则

为啥 firebase_firestore 安全规则不适用于文档读取

所有存储桶的 Firebase 存储安全规则

带有 Google 操作的 Firebase 存储

Firebase 存储安全规则

为特定用户提供访问权限的 Firebase 存储安全规则