在 Firebase 中限制允许的密钥
Restricting allowed keys in Firebase
有没有办法只允许(但不要求)Firebase 对象中的键?我知道您可以使用 .validate
来确保对象具有某些键。是否可以 only 允许某些键,在某种白名单中?如果没有,这似乎是 unwanted/unnecessary 数据从恶意客户端进入数据库的好方法。
您可以使用 Firebase 的 $ 变量 禁止所有未指定的子项。来自 Firebase guide on securing your data,这个例子:
{
"rules": {
"widget": {
// a widget can have a title or color attribute
"title": { ".validate": true },
"color": { ".validate": true },
// but no other child paths are allowed
// in this case, $other means any key excluding "title" and "color"
"$other": { ".validate": false }
}
}
}
所以widget
节点可以有一个color
and/or一个title
属性。但如果它有任何其他属性,它将被拒绝。
所以根据这些安全规则,这些都是有效的:
ref.child('widget').set({ title: 'all is blue' });
ref.child('widget').set({ color: 'blue' });
ref.child('widget').set({ title: 'all is blue', color: 'blue' });
但是根据上面的规则这些都是无效的:
ref.child('widget').set({ titel: 'all is blue' });
ref.child('widget').set({ title: 'all is blue', description: 'more...' });
有没有办法只允许(但不要求)Firebase 对象中的键?我知道您可以使用 .validate
来确保对象具有某些键。是否可以 only 允许某些键,在某种白名单中?如果没有,这似乎是 unwanted/unnecessary 数据从恶意客户端进入数据库的好方法。
您可以使用 Firebase 的 $ 变量 禁止所有未指定的子项。来自 Firebase guide on securing your data,这个例子:
{
"rules": {
"widget": {
// a widget can have a title or color attribute
"title": { ".validate": true },
"color": { ".validate": true },
// but no other child paths are allowed
// in this case, $other means any key excluding "title" and "color"
"$other": { ".validate": false }
}
}
}
所以widget
节点可以有一个color
and/or一个title
属性。但如果它有任何其他属性,它将被拒绝。
所以根据这些安全规则,这些都是有效的:
ref.child('widget').set({ title: 'all is blue' });
ref.child('widget').set({ color: 'blue' });
ref.child('widget').set({ title: 'all is blue', color: 'blue' });
但是根据上面的规则这些都是无效的:
ref.child('widget').set({ titel: 'all is blue' });
ref.child('widget').set({ title: 'all is blue', description: 'more...' });