firebase - 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
并且公共访问是通过token
.
因此,我知道存储内容实际上并不是完全私有的,因为即使我设置了严格的规则,即使我个人和我的应用程序没有生成下载 URL,Firebase 仍然会为每个文件自动生成这样的 URL,因此,即使令牌是很难找到,无论如何,这些内容都可以在网上公开访问。
我的理解正确吗?
或者我在 Firebase 控制台中找到的链接不是下载网址,而是一个临时链接,分别是控制台提供的令牌作为到期期限?
或者是否可以将 Firebase 存储桶设置为不生成任何下载链接?
解决方案
任何拥有带有有效令牌的下载 URL 的人都可以从任何地方访问内容。但是,如果您从未将该 URL 公开给任何人,那么任何人基本上都无法猜出该 URL,即使他们知道路径。令牌是随机的并且包含大量的熵。
如果您担心有人用正确的令牌猜测此 URL,您还应该担心宇宙中的两个随机原子相互碰撞。(这有点夸张,但如果您假设标记的每个字符都是有效的十六进制数字,您可以进行数学计算。)
如果您仍然偏执,并且根本不想生成任何下载 URL,则必须手动撤销下载 URL 令牌,并使用不会同时创建下载 URL 的上传技术,并且永远不要调用来自客户端应用程序的任何文件的 getDownloadUrl。
推荐阅读
- c++ - 链接到静态库中的 explicit_bzero (glibc)
- vhdl - Vivado 在综合过程中完全消除了设计 - 可能存在约束问题
- javascript - ExtJS7:查询参数不匹配的路由
- html - 使 div 处于活动状态而不单击其中的某个位置
- html - 视差效果不适用于小型设备
- flutter - 未来建造者
在 CustomScrollView 内部颤动 - python - 如何在詹金斯上获得 python3?
- javascript - 有没有办法将控制器功能普遍应用于快速路由器文件中的所有路由?
- x11 - Yocto:如何将 Gnome 或 lxde 集成到我自己的图像配方中?
- python-3.x - 忽略 argparse 中的重复选项