如果已知通配符,则使用通配符读取数据的 Firebase 规则
Firebase rules with wildcards to read data if wildcard is known
我有一个注册系统,我希望只有拥有有效密钥的用户才能注册,我会向想要注册的用户提供该密钥。如果密钥在数据库中,则继续注册。因此,我生成了随机不重复的 8 个字符,并将它们按以下结构存储在实时数据库中:
Secrets:
"x5f1n9v0":
"Status" : 1
"C8vT2xxY":
"Status" : 1
And so on
..
{
"rules": {
"secrets":{
"$secret": {
".read": true,
".write": false
}
}
}
}
关于上述规则的第一个问题:-
在这种情况下,没有人可以添加新的密钥吗?
此外,只有当某人拥有我列表中的有效密钥时,读取才会有效?没有人可以阅读整个列表?这里面有什么错误吗?
现在假设另一组规则,如果用户知道有效 ID,我想写入每个键的子项。
如果我将写入规则更改为 true,这是否有效并且没有漏洞可以破解它?
"rules": {
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
}
}
谢谢
In this case no one can add a new secret key?
根据这些第一条规则,只有具有管理权限的人才能添加密钥。
Also the read will only be valid if someone has a valid key from my list? Nobody can read the whole list?
确实无法使用第一组规则阅读整个列表。只有知道密钥的人才能读取秘密。
你的第二套规则:
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
现在任何人都可以写任何秘密。那可能不是你想要的。如果您只想允许他们更改现有密钥下已经存在的数据,您需要检查是否已经有任何数据:
"secrets":{
"$secret": {
".read": true,
".write": "data.exists()"
}
}
如果您希望他们无法 change-but-not-delete 现有数据,那就是 data.exists() && newData.exists()
。如果您对用户可以写入的数据格式有其他要求,您需要将这些添加到相应的 .validate
规则中。
你的最后一套规则既无效又毫无意义。它无效,因为 $secrets
未定义。但即使它被定义 $secrets === $secrets
也将永远是 true
.
我有一个注册系统,我希望只有拥有有效密钥的用户才能注册,我会向想要注册的用户提供该密钥。如果密钥在数据库中,则继续注册。因此,我生成了随机不重复的 8 个字符,并将它们按以下结构存储在实时数据库中:
Secrets:
"x5f1n9v0":
"Status" : 1
"C8vT2xxY":
"Status" : 1
And so on
..
{
"rules": {
"secrets":{
"$secret": {
".read": true,
".write": false
}
}
}
}
关于上述规则的第一个问题:- 在这种情况下,没有人可以添加新的密钥吗? 此外,只有当某人拥有我列表中的有效密钥时,读取才会有效?没有人可以阅读整个列表?这里面有什么错误吗?
现在假设另一组规则,如果用户知道有效 ID,我想写入每个键的子项。
如果我将写入规则更改为 true,这是否有效并且没有漏洞可以破解它?
"rules": {
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
}
}
谢谢
In this case no one can add a new secret key?
根据这些第一条规则,只有具有管理权限的人才能添加密钥。
Also the read will only be valid if someone has a valid key from my list? Nobody can read the whole list?
确实无法使用第一组规则阅读整个列表。只有知道密钥的人才能读取秘密。
你的第二套规则:
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
现在任何人都可以写任何秘密。那可能不是你想要的。如果您只想允许他们更改现有密钥下已经存在的数据,您需要检查是否已经有任何数据:
"secrets":{
"$secret": {
".read": true,
".write": "data.exists()"
}
}
如果您希望他们无法 change-but-not-delete 现有数据,那就是 data.exists() && newData.exists()
。如果您对用户可以写入的数据格式有其他要求,您需要将这些添加到相应的 .validate
规则中。
你的最后一套规则既无效又毫无意义。它无效,因为 $secrets
未定义。但即使它被定义 $secrets === $secrets
也将永远是 true
.