如何使用 Firebase 安全规则仅允许指定的 child 名称进行写入操作
How to allow only specified child names for write operation with Firebase Security Rules
我有一个用户节点,其中我的用户数据仅包含 uid、姓名和年龄,如下所示:
{
"user_1": {
"uid": "user_1",
"name": "Alex",
"age": 35,
}
}
我想我可以使用 hasChildren
方法来防止任何人添加 child 除了我指定的那些:
"users": {
"$uid": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['uid', 'name', 'age'])",
},
}
但是,它不起作用,因为用户只要提供uid、姓名和年龄就可以添加任何他们想添加的内容。我总是在客户端检查数据,但是恶意的人可以找出 api 并添加不必要的东西。有办法解决这个问题吗?
文档中没有关于这个问题的任何内容,但我在谷歌上搜索并找到了一些东西。在您的节点中包含一个额外的通配符并使 .validate
始终为 false 会在新数据具有您指定的键以外的子键时拒绝该操作。
"users": {
"$uid": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['uid', 'name', 'age'])",
// Make sure you specify all keys you want to allow
// so the wildcard won't match them
"uid": { ".validate": "newData.isString()" },
"name": { ".validate": "newData.isString()" },
"age": { ".validate": "newData.isNumber()" },
// Add this wildcard below and make it false always
"$other": { ".validate": false }
}
}
不要忘记您应该在节点中包含所有键。
查看 this 了解更多信息。
我有一个用户节点,其中我的用户数据仅包含 uid、姓名和年龄,如下所示:
{
"user_1": {
"uid": "user_1",
"name": "Alex",
"age": 35,
}
}
我想我可以使用 hasChildren
方法来防止任何人添加 child 除了我指定的那些:
"users": {
"$uid": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['uid', 'name', 'age'])",
},
}
但是,它不起作用,因为用户只要提供uid、姓名和年龄就可以添加任何他们想添加的内容。我总是在客户端检查数据,但是恶意的人可以找出 api 并添加不必要的东西。有办法解决这个问题吗?
文档中没有关于这个问题的任何内容,但我在谷歌上搜索并找到了一些东西。在您的节点中包含一个额外的通配符并使 .validate
始终为 false 会在新数据具有您指定的键以外的子键时拒绝该操作。
"users": {
"$uid": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['uid', 'name', 'age'])",
// Make sure you specify all keys you want to allow
// so the wildcard won't match them
"uid": { ".validate": "newData.isString()" },
"name": { ".validate": "newData.isString()" },
"age": { ".validate": "newData.isNumber()" },
// Add this wildcard below and make it false always
"$other": { ".validate": false }
}
}
不要忘记您应该在节点中包含所有键。
查看 this 了解更多信息。