【问题标题】:Security Concerns : Accessing Firebase Storage files with a public Url安全问题:使用公共 URL 访问 Firebase 存储文件
【发布时间】:2020-12-29 10:35:01
【问题描述】:

Firebase 存储允许使用 URL https://someUrl 访问文件

您可以使用安全规则限制 Firebase 存储访问。

如果这样做,则需要将令牌与 URL 一起传递,以绕过这些规则。像这样https://someUrl&token=someToken

但是,您也可以向所有人授予读取权限。在这种情况下,https://someUrl 就足以获取内容。

这是一个关于安全的问题吗?我想知道恶意用户是否可以通过任何方式找到https://someUrl

谢谢!

【问题讨论】:

  • 有点同意@Doug Stevenson 的观点。如果您甚至无法访问在线存储,那么拥有令牌有什么意义?能说清楚一点吗?
  • @ChayneP.S.我正在使用 Flutter Cached 网络映像 (pub.dev/packages/cached_network_image) 首先,我可以访问在线存储。我将 URL 提供给缓存的网络图像。它获取内容,然后根据该特定 URL 获取缓存的内容。这就是为什么我在离线时需要 URL。这是我缓存内容的“路径”

标签: firebase security firebase-storage firebase-security


【解决方案1】:

出于缓存原因,我需要能够在离线时检索 URL。

我不清楚您的“缓存原因”是什么,但离线时get a full download URL 不支持。 API 要求客户端应用必须在线。

这与安全性有何关系?

安全问题是用户需要具有安全规则授予对象的读取权限才能获取下载 URL。由于在后端评估安全规则,因此用户需要在线才能让 Storage 允许访问 URL。显然,如果不能上网,就无法访​​问服务器,也就无法访问规则了。

由于此 URL 用于移动应用程序,用户有什么方法可以找到该 URL?

不在离线时,不。考虑尝试以某种方式在在线时预先获取 URL,并将其存储在本地以供离线时使用(这有点奇怪,因为离线时 URL 也不会加载任何内容)。

【讨论】:

  • 我完全更新了这个问题,使其更加清晰/具体。请原谅最初的混乱!在问题下,我解释了一点“缓存原因”
  • 听起来你还是应该按照我的建议在在线时预先缓存图像。
【解决方案2】:

根据这个回答Understanding Firebase Storage tokens

如果对象更改,Firebase 存储令牌也会更改。因此,您可以检索下载 URL,并将其作为唯一 URL 来检索特定版本中的对象。

回答您的问题,因为令牌是随机的,用户无法在不知道令牌的情况下检索对象。这与任何其他基于令牌的凭证具有相同级别的安全性,如果您知道 url,您就可以访问该对象。

【讨论】:

  • 感谢您的回答。 “如果您知道 url,您就可以访问该对象”。问题是,如果我的安全规则允许所有人读取,我也可以在没有令牌部分的情况下访问该对象。但我想知道这是否会成为安全问题
  • @SkR 因此,您可以了解 Firebase 安全性的工作原理,以及它们的“公共访问权限”。它只是意味着 URL 是可预测的,但是对于“私人访问”,URL 是随机的,并且在不知道的情况下无法访问它。一些公共文件共享也采用这种方法,只需生成您需要通过电子邮件发送给其他人以授予他们访问对象的随机 URL。
猜你喜欢
  • 2016-03-18
  • 2020-03-19
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
相关资源
最近更新 更多