我想问您我的设置是否足够安全,以确保用户只能访问自己在 Firebase 实时数据库上的数据。
或者我可以添加其他任何内容以使其更安全吗?
在我的数据库中,每个用户都有一个帐户条目,它是以太坊钱包帐户的字符串,而不是他的 auth.uid。
数据库的结构如下所示:
{
"accounts": {
"account1": {
"item1": "value",
"item2": "value"
},
"account2": {
"item1": "value",
"item2": "value"
},
"account3": {
"item1": "value",
"item2": "value"
}
}
}
经过一些测试后,似乎以下安全规则仅允许在用户知道其帐户字符串的情况下访问帐户数据:
{
"rules": {
".read": false,
".write": false,
"accounts": {
".read": false,
".write": false,
"$account": {
".read": true,
".write": false
}
}
}
}
我只能通过第3行的以下示例读取帐户数据:
get(child(dbRef, `/`)).then((snapshot) => { // Not allowed
get(child(dbRef, `accounts/`)).then((snapshot) => { // Not allowed
get(child(dbRef, `accounts/${account}`)).then((snapshot) => { // Allowed
您的规则允许用户读取
/accounts/$account
以获取他们知道的任何 $account
值。您的规则中没有任何内容可以确保这是他们自己的数据,因此您的规则似乎不符合您的要求。
为了使规则匹配,您应该在数据中具有一些标识“自己的数据”的值,然后在规则中检查该值。
我建议在编写这些规则时保留关于常见安全设置的 Firebase 文档。