我有注册系统,我只希望用户注册,如果他们有一个有效的密钥,我将提供给想要注册的用户。如果key在db中,则继续注册。因此,我生成了随机非重复的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
}
}
}
}
由于
答案 0 :(得分:0)
在这种情况下,没有人可以添加新的密钥?
根据这些第一条规则,只有具有管理访问权限的人才能添加密钥。
只有当某人拥有我的列表中的有效密钥时,该读取才有效吗?没人能读完整个清单吗?
确实没有办法用你的第一套规则读取整个列表。有人只有在知道密钥的情况下才能阅读秘密。
使用第二套规则:
"secrets":{
"$secret": {
".read": true,
".write": true
}
}
现在任何人都可以写任何秘密。这可能不是你想要的。如果您只想让他们更改现有密钥下已存在的数据,您需要检查是否已存在任何数据:
"secrets":{
"$secret": {
".read": true,
".write": "data.exists()"
}
}
如果您希望他们无法更改但不删除现有数据,那将是data.exists() && newData.exists()
。如果您对用户可以编写的数据格式有其他要求,则需要将这些要求添加到相应的.validate
规则中。
你的最后一套规则既无效又毫无意义。它无效,因为未定义$secrets
。但即使已定义$secrets === $secrets
,也始终为true
。