首页 文章

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

提问于
浏览
4

Introduction

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

  • 新用户注册到firebase应用程序 . Firebase给了他一个user.UID .

  • 然后,管理员 deletedisabled 来自firebase管理控制台的用户 .

  • 用户刷新客户端应用 .

  • (我发现)用户仍然可以写入firebase数据库,即使他的帐户已被删除/禁用 .

.

Goal / Intention

我想在管理控制台/(auth / users)中将用户 does not existdisabled 设置为 prevent access (.read OR .write)到firebase数据库的规则 .

有点像这样:

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

.

FIREBASE REFERENCE DOC: https://firebase.google.com/docs/reference/security/database/#auth

Question

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

2 回答

  • 2

    删除用户不会撤消该用户的现有令牌 . 见Firebase authentication not revoked when user deleted? . 如果您使用的是标准身份提供商之一,则意味着用户在删除帐户后仍可以访问数据一小时 .

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

    处理此方案的一种简单方法是在数据库中保留允许或不允许用户黑名单的白名单 . 对于黑名单,您将保留一个禁用/删除用户的顶级(世界可读,仅管理员可写)列表:

    banned
      uid12345: true
    

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

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

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

    您可以按 doc -v2User Based Security 执行此操作

    var FirebaseTokenGenerator = require("firebase-token-generator.js");
    var tokenGenerator = new FirebaseTokenGenerator(FIREBASE_SECRET);
    var token = tokenGenerator.createToken({ "uid": "1", "hasEmergencyTowel": true });
    

    对于上面创建的令牌,您可以按如下方式编写规则:

    {
      "rules": {
        "frood": {
          ".read": "auth.hasEmergencyTowel === false"
        }
      }
    }
    

    一旦UID Scope id即将结束,就可以调用它 .

    供参考:User Based Security Doc -v2

相关问题