firebase - 如何设置Firebase数据库规则?如何防止已删除用户的.write

标签 firebase firebase-realtime-database firebase-authentication firebase-security

简介

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

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

.

目标/意图

我想设置一条规则,当用户不存在已禁用阻止访问(.read 或 .write)Firebase 数据库> 在管理控制台/(auth/users) 中。

像这样的事情:

"rules":{
  "$uid":{
    ".write":"auth.isUserActive(auth.uid) == true"
  }
}

.

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

问题

怎样才能达到上述目的呢?我应该为 firebase DB 设置哪些规则?

最佳答案

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

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

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

banned
  uid12345: true

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

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

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

关于firebase - 如何设置Firebase数据库规则?如何防止已删除用户的.write,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38195656/

相关文章:

javascript - 注销后调用 Firebase getRedirectResult

javascript - JS Google Cloud 函数错误 : Reference. 更新失败:第一个参数包含属性中的未定义

使用 Google Identity (GoogleYOLO) 进行 Firebase 身份验证

java - 通过 Firestore 仅存储当前登录用户的数据

firebase - Firebase在Flutter函数中获取uid的问题

java - FirebaseUI - 在动态查询数据上填充 RecyclerView

javascript - 如何设置firebase数据库安全规则?

javascript - Firebase 函数将对象打印到控制台

javascript - TypeError : _this. props.editAp 不是一个函数

javascript - Firebase token.email_verified 变得奇怪