javascript - 使用 Firebase 的 push()/childByAutoID 生成的名称的唯一性保证是什么?

标签 javascript ios security firebase

我想使用 Firebase 制作位置难以猜测的公开可读数据。因此,为了让某人访问存储在“element [element ID = X]”中的数据,我只想向他们发送“X”,而不是向他们发送“X”以及为他们提供访问权限而制作的安全 token 到元素。 Firebase 的 push()childByAutoID 似乎是天作之合:我可以授予对所有单个元素的公共(public)读取访问权限,但拒绝公开列表。我的代码将幸福地没有 token 和随机数生成。自动生成的 ID 应该是唯一的,因此应该很难猜到。

从看Firebase.js , 看起来自动生成的 ID 的前 8 个字符是基于当前时间戳的,接下来的 12 个字符是使用 Math.random() 随机生成的。我假设 iOS 框架做同样的事情,虽然我看不到代码,但库链接到 SecRandomCopyBytesarc4random

就我的目的而言,这看起来已经足够好了,但是有没有人看到 Firebase 关于我们是否可以依靠这种行为的指导?我不愿意构建假设这些名称是相对强的随机字符串的代码,然后在我升级到更新版本的 Firebase 时违反该假设。

最佳答案

Firebase 提供的自动生成 ID 的目的是允许开发人员以分布式方式创建按时间顺序排列的列表。它依赖于 Math.random 和时间戳来生成该客户端唯一的 ID。

但是,如果您要使用自动 ID 作为安全 key ,这可能不是最好的主意,具体取决于您希望系统的安全程度。 Math.random 是 not a cryptographically secure random number generator由于 push() 依赖于它,因此它生成的 ID 也不是。

如果用户知道 key 是一个好的 key ,则允许用户访问 Firebase 中的某些数据的一般概念。我们有一个 example使用这种类型的安全规则,但我们不使用推送 ID,而是使用内容本身的 SHA-256 哈希(在这种特殊情况下,它们是图像)。散列内容以生成 key 比依赖 push() ID 更安全。

关于javascript - 使用 Firebase 的 push()/childByAutoID 生成的名称的唯一性保证是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20983313/

相关文章:

javascript - 返回字符串中第一个数字之前出现的所有字母

javascript - 第一次窗口加载或 iframe 加载会发生什么事件?

iphone - 遍历 NSFetchRequest 结果时无错误地崩溃

ios - 选择行时,UITableView 数据排序返回错误数据

ruby-on-rails - 如何保护 Rails 应用程序免受 Firesheep 攻击?

javascript - 使用jquery添加表行中的数字

javascript - Vue 组件无法读取属性

ios - 导航栏标题仅显示半顶

html - GET 或 POST 是否比另一个更安全?

asp.net - 根据经过身份验证的用户访问文件共享上的某些文件夹