当前位置: 首页 > 知识库问答 >
问题:

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

赵英资
2023-03-14

介绍

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

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

...

目标/意图

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

像这样的事情:

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

...

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

问题

如何实现上述意图?我应该设置什么规则到Firebase DB?

共有2个答案

薛浩言
2023-03-14

您可以按照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即将结束时调用

供参考:基于用户的安全文档-v2

师博
2023-03-14

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

代码中没有应用编程接口来检查给定的uid是否仍然存在。即使有这样的应用编程接口,在这种情况下也没有用,因为恶意用户可以绕过检查直接调用应用编程接口。

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

banned
  uid12345: true

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

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

"posts": {
  ".read": "auth != null && !root.child('banned').child(auth.uid).exists()"
}
 类似资料:
  • 我有一个用于用户配置文件图像的模型,当我删除具有默认图像的用户时,默认图像也会被删除。我相信这是必须的,因为我设置了on_delete=models.CASCADE。 我尝试在ImageField中启用_delete=PROTECT,但它无法识别该属性。

  • 我已经在我的实时数据库中创建了一个被禁止的用户列表,我想让他们无法登录,我知道我可以使用数据库规则,但我不知道怎么做,有人能帮我吗? 这是我的数据库结构: 以下是我的数据库规则:

  • 如何在Firebase实时数据库中设置安全规则? 我得到了这个信息。 您选择以测试模式开始开发,这将导致您的Cloud Fi还原数据库完全发布在Internet上。您的应用程序更容易受到攻击,因此您的Fi还原安全规则已设置为在头30天后停止接收任何请求。 系统将开始拒绝发送到Firestore数据库的所有客户端请求。在此之前,请编写高强度的安全规则,以便应用程序能够正常运行,同时正确保护您的数据。

  • 到目前为止,我只能在阅读firebase文档后得出以下结论:

  • 我正在尝试为我的Firebase实时数据库设置规则,但我不明白为什么它们不起作用。下面是数据顶部的样子: 假设我希望允许用户读取其用户名与数据中的name字段匹配的数据。我以为这样的事情会奏效 不幸的是,这对我不起作用。为了学习,我甚至试过这个 或者甚至 这到底是怎么回事

  • 我有一个简单的应用程序,我正在努力学习如何制作,它只显示我定期上传的折扣和优惠券交易数据列表。没有收集用户数据,因此我认为不需要进行身份验证或登录。然而,当我了解并阅读有关存储和检索数据的内容时,似乎我不得不这样做。特别是在firebase实时数据库方面。它告诉我,我的规则是不安全的,因为读和写都被设置为真。我理解“写入”是不安全的,但是如果我没有存储任何个人数据,让“读取”函数对任何人都设置为t