如何设置 Firebase 数据库规则?如何防止被删除的用户写入 .write

Nik*_*Nik 5 firebase firebase-security firebase-authentication firebase-realtime-database

介绍

我正在构建一个 Firebase Web 客户端应用程序。我想设置 Firebase 数据库规则。

  1. 新用户注册到 Firebase 应用。Firebase 给了他一个 user.UID。
  2. 然后,管理员删除禁用了 Firebase 管理控制台中的用户。
  3. 用户刷新客户端应用程序。
  4. (我发现)即使他的帐户已被删除/禁用,用户仍然可以写入 firebase 数据库。

.

目标/意图

我想设置一个规则,当用户不存在或在管理控制台/(身份验证/用户)中禁用时,阻止访问(.read 或 .write)firebase 数据库。

像这样的事情:

"rules":{
  "$uid":{
    ".write":"auth.isUserActive(auth.uid) == true"
  }
}
Run Code Online (Sandbox Code Playgroud)

.

FIREBASE 参考文档: https ://firebase.google.com/docs/reference/security/database/#auth

我怎样才能实现上述意图?我应该为 firebase DB 设置什么规则?

Fra*_*len 4

删除用户不会撤销该用户的现有令牌。请参阅删除用户后 Firebase 身份验证未撤销?。如果您使用的是标准身份提供商之一,这意味着用户在您删除帐户后一小时内仍然可以访问数据。

没有 API 可供您使用代码来检查给定的 uid 是否仍然存在。即使存在这样的 API,在这种情况下也无济于事,因为恶意用户可以绕过该检查并直接调用 API。

处理这种情况的一个简单方法是在数据库中保留允许用户的白名单或不允许用户的黑名单。对于黑名单,您将保留一个被禁止/删除的用户的顶级(世界可读,管理员只能写入)列表:

banned
  uid12345: true
Run Code Online (Sandbox Code Playgroud)

当您的管理员删除用户时,他们也会将其添加到此列表中。

然后在您的安全规则中,您检查并禁止被禁止的用户访问。例如:

"posts": {
  ".read": "auth != null && !root.child('banned').child(auth.uid).exists()"
}
Run Code Online (Sandbox Code Playgroud)