Firebase对象键是否可以猜测?

时间:2017-03-30 22:23:57

标签: firebase firebase-realtime-database firebase-security

说我有这样的数据:

users{
 $authId: {
     name:"",
     propertiesById:{
          uniqueId1:true,
          uniqueId2:true
     }
 }
},
properties:{
     uniqueId1:{
        key:val
     },
     uniqueId2:{
        key:val
     }
 }

假设我有适当的规则让用户只能读/写他们自己的用户对象,我该如何安全地阅读我的属性?

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

如果可能的话,我将如何编写一条规则:"用户无法单独按键"来获取整个属性集合。另外,如果我能够写出这条规则,它会安全吗?我不清楚难以猜测firebase push()生成的密钥。

1 个答案:

答案 0 :(得分:1)

虽然Firebase推送ID难以猜测,但它们绝对是可以猜到的。您不应该依赖用户无法猜测推送ID的安全性。

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

{
  "rules": {
    "properties": {
      "$uniqueId": {
        ".read": true,
        ".write": true
      }
    }
  }
}

这些规则允许任何用户读取任何特定属性,只要他们知道该属性存在即可。因此,没有人可以阅读/properties,但每个人都可以阅读/properties/uniqueId1/properties/uniqueId2

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

来自Firebase blog post explaining push IDs

  

我们也会对开发人员是否可以依赖其他人无法访问推送ID感到疑问,如果您尝试通过不可饶恕的Firebase路径进行安全检查,这一点很重要。虽然推送ID通常很难猜测,但如果您依赖于无法使用的ID,则应使用更安全的机制自行生成它们。