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代码段是否是这个问题的流行解决方案?或者你会建议我用另一种方式去做吗?这段话与这篇博文有关:。事实上,我意识到这也告诉我们不要将它们用作安全机制。我已经在我的回答中添加了这个。