Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase对象关键点是可猜测的吗?_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

Firebase对象关键点是可猜测的吗?

Firebase对象关键点是可猜测的吗?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,假设我有这样的数据: users{ $authId: { name:"", propertiesById:{ uniqueId1:true, uniqueId2:true } } }, properties:{ uniqueId1:{ key:val }, uniqueId2:{ key:val } } 假设我有适当的规则让用户只能读/写他们自己的

假设我有这样的数据:

users{
 $authId: {
     name:"",
     propertiesById:{
          uniqueId1:true,
          uniqueId2:true
     }
 }
},
properties:{
     uniqueId1:{
        key:val
     },
     uniqueId2:{
        key:val
     }
 }
假设我有适当的规则让用户只能读/写他们自己的用户对象,我如何安全地读取我的属性

我知道在规则中,我可以转到根目录,找到用户对象,并确保我试图读取的属性存在于propertiesById中,但这似乎会影响性能,因为这些属性将是非常大的属性集合


如果可能的话,我将如何着手编写一条规则:用户不能获取整个属性集合,只能通过键单独获取。还有,如果我能写下这个规则,它会安全吗?我不清楚猜测firebase push生成的密钥有多困难。

虽然firebase push ID很难猜测,但它们肯定是可以猜测的。为了安全起见,您不应该依赖用户猜不到推送ID

但是,考虑到这一点,很容易做到:

{
  "rules": {
    "properties": {
      "$uniqueId": {
        ".read": true,
        ".write": true
      }
    }
  }
}
这些规则允许任何用户读取任何特定属性,只要他们知道该属性存在。因此,没有人可以读取/properties,但每个人都可以读取/properties/uniqueId1和/properties/uniqueId2

但同样:这是不安全的,因为推送ID在某种程度上是可以合理猜测的

从:

我们还遇到了开发人员是否可以依赖推送ID使其他人无法使用的问题,如果您试图通过无法使用的Firebase路径进行安全保护,这一点很重要。虽然推送ID通常很难猜测,但如果您依赖于不可用的ID,则应该使用更安全的机制自己生成它们


关于钥匙的猜测:谢谢你,弗兰克!@cartant发布的generate-pushid代码段是否是这个问题的流行解决方案?或者你会建议我用另一种方式去做吗?这段话与这篇博文有关:。事实上,我意识到这也告诉我们不要将它们用作安全机制。我已经在我的回答中添加了这个。