说我有这样的数据:
users{
$authId: {
name:"",
propertiesById:{
uniqueId1:true,
uniqueId2:true
}
}
},
properties:{
uniqueId1:{
key:val
},
uniqueId2:{
key:val
}
}
假设我有适当的规则让用户只能读/写他们自己的用户对象,我该如何安全地阅读我的属性?
我知道在规则中,我可以转到root,找到用户对象并确保我尝试读取的属性存在于propertiesById中,但这似乎会影响性能,因为这些将会影响性能非常大的财产集合。
如果可能的话,我将如何编写一条规则:"用户无法单独按键"来获取整个属性集合。另外,如果我能够写出这条规则,它会安全吗?我不清楚难以猜测firebase push()生成的密钥。
答案 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,则应使用更安全的机制自行生成它们。