Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Firebase数据库规则?如何防止从已删除的用户写入_Firebase_Firebase Realtime Database_Firebase Authentication_Firebase Security - Fatal编程技术网

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

如何设置Firebase数据库规则?如何防止从已删除的用户写入,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,导言 我正在构建firebase web客户端应用程序。我想设置Firebase数据库规则 注册到firebase应用程序的新用户。Firebase给了他一个user.UID 然后,从firebase管理控制台管理删除用户或禁用用户 用户刷新客户端应用程序 (我发现)用户仍然可以写入firebase数据库,即使他的帐户已被删除/禁用 目标/意图 我想设置一个规则,当管理控制台/(auth/users)中不存在用户或禁用用户时,禁止访问(.read或.write)firebase数据库 像这样的

导言

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

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

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

    像这样的事情:

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

    FIREBASE参考文档:

    问题


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

    您可以按照
    doc-v2

    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作用域id即将结束,就可以调用它


    仅供参考:

    删除用户不会撤销该用户的现有令牌。看见如果您使用的是标准身份提供者之一,这意味着用户在您删除帐户后一小时内仍可以访问数据

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

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

    banned
      uid12345: true
    
    管理员删除用户时,也会将其添加到此列表中

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

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

    这对帐户已被删除的用户有何帮助?请正确阅读我的答案:)不允许删除,但允许更改用户访问规则。删除用户帐户时可以调用此函数!生成新令牌不会使现有令牌无效。这是基于声明的令牌系统的固有特性:一旦创建并分发了令牌,就不能更改其中的声明。这个函数叫什么?如果是客户端应用程序,那么恶意用户可以绕过callI希望使用服务器端解决方案的答案。恶意用户可以绕过客户端代码。