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

火力库实时数据库具有不安全的规则

齐胜涝
2023-03-14

我在应用程序中使用Firebase实时数据库进行聊天功能。现在我们已经准备好启动我们的应用程序,因此我们应该修复此问题<代码>xxxx-xxxx-4458'具有不安全的规则。在官方文档和其他地方,我找到了唯一需要使用firebase auth进行验证的解决方案,但我们的主数据库和登录过程在我们自己的服务器上工作,我们使用firebase实时聊天仅用于聊天目的,因此我们不使用任何firebase身份验证,因此我们仍然无法解决问题。

We've detected the following issue(s) with your security rules:

any user can read your entire database
any user can write to your entire database

那么,有没有其他方法可以在不使用firebase身份验证的情况下保护我们的数据库。

我们的Firebase实现。

> < li>

我们对所有用户登录、会话和用户数据使用我们自己的服务器。用户登录和验证由我们自己的服务器执行。这就是为什么除了实时聊天,我们不把firebase用于任何其他应用功能

由于我们没有使用Firebase身份验证进行用户验证。我们无法保护实时数据库。用户登录、注册、会话、验证都由我们自己的服务器执行,从我们自己的服务器验证后,用户可以开始使用实时数据库发送消息。

我们目前的规则

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

问题:我们已经免受外来攻击(非应用程序用户)了吗?如果没有,那么我们如何在我们的场景中保证数据库的安全呢?。

更新:这就是我的数据库安排的方式。

现在,在成功登录我们的服务器后,我正在生成JWT并将其用作

mAuth.signInWithCustomToken(mCustomToken)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success

                } else {
                    // If sign in fails
                    Toast.makeText(CustomAuthActivity.this, "Authentication failed.",
                }
            }
        });

我不明白在哪里/如何在firebase Auth上验证令牌。请把洞察力放在它上面。

共有1个答案

柴嘉年
2023-03-14

根据您当前的规则,世界上任何人都可以通过单个 API 调用擦除您的数据库。他们还可以通过单个 API 调用读取整个数据库。这些都不太可能是您的应用程序需要的用例,因此我认为您的应用程序目前不安全。

如果您想根据用户身份正确保护访问,您可以通过实施自定义身份验证来通知Firebase身份验证您自己身份系统中用户的配置文件。实现后,安全规则中的auth变量将包含来自您自己的用户系统的信息,然后您可以使用它来保护对数据的访问。

即使您对用户一无所知,通过编写适合您的用例的规则,您也可以更好地保护您的应用程序。

例如,因为你有一个聊天应用程序,你可能有一个聊天信息列表,用户会在这个列表中添加新的信息。不是说每个人都可以对你的数据库根做他们想做的任何事情,你只能允许他们发布类似如下的聊天消息:

{
  "rules": {
    "chat": {
      ".read": true,
      "$message_id": {
        ".write": true
      }
    }
  }
}

所以现在,用户只能读取/chat节点,只能在其下写入特定节点。仅仅这个简单的改变就已经排除了很多滥用场景。

更好的一步是验证聊天消息的结构是否符合您的预期。例如,如果消息有用户名、时间戳和文本消息,则可能是:

{
  "rules": {
    "chat": {
      ".read": true,
      "$message_id": {
        ".write": true,
        ".validate": "newData.hasChildren('name', 'timestamp', 'text')"
      }
    }
  }
}

此时,您应该注意,这些规则反映了一些应用程序代码,这是正常的:您的安全规则应该只允许应用程序代码需要的内容,仅此而已。这称为最小特权原则,并且是一种常见的安全做法。

最后,您可能还应该考虑使用Firebase应用程序检查,这也可以防止不使用您的应用程序访问数据库的人员大量滥用。请注意,这并不是一个保证,因此您需要将应用程序检查与安全规则结合起来,以实现广泛的保护和细粒度控制。

更多资源:

  • Firebase 电子邮件说我的实时数据库有不安全的规则
  • 火基地说我的规则不安全,为什么?
  • 我的 Firebase 实时数据库安全规则问题
  • 火库规则写入权限
 类似资料:
  • 我在中收到一条消息,告诉我我的项目有不安全的规则。但当我检查它时,我不太明白什么是不安全的。 它显示如下: 我保留了读取访问权限,因为它支持一个网站。所以任何访问该网站的人都应该能够读取数据。 至于写权限,据我所知,我是唯一能写的人。 请注意,我还有第三个系列(CollectionThree),规则中没有提到。这可能是原因吗? 除此之外,我还可以想象,只有web服务器可以获得读取权限,以便将内容提

  • 我创建了一个应用程序,它使用Firebase实时数据库。我对安全规则有一个很大的问题。我的用户不需要登录使用应用程序,他们可以发送数据到数据库,无需任何身份验证。例如:这是一个简单的游戏,他们可以互相玩,然后他们可以保存分数。我想创建一个安全的数据库,但是任何人都可以写

  • 最近我收到了一系列Firebase通知,涉及: [Firebase]您的Cloud FiRecovery数据库有不安全的规则 我们检测到您的安全规则存在以下问题:任何用户都可以写入您的整个数据库。因为您的项目没有强大的安全规则,任何人都可以访问您的整个数据库。攻击者可以窃取、修改或删除您的数据,并会抬高您的账单` Edit2:我需要的是允许每个人都写,而不需要登录,但是只有管理员帐户应该能够从Fi

  • 好的,我有一个实时数据库连接到一个应用程序,直到今天规则(读写)都设置为真,一切都很好。。。。但每次有消息说 您的安全规则定义为public,因此任何人都可以窃取、修改或删除数据库中的数据 我尝试了几件事,但没有访问数据。。。只有当规则设置为true时,才能访问数据 但有没有办法修改规则,使其更安全 我希望只有少数已知的应用程序(我的应用程序)可以访问此数据

  • 我在Android Studio中创建了一个应用程序,并将其与Firebase实时数据库链接。我需要执行3次验证: > 由Firebase通知服务生成的一次性PIN和手机验证。 在下一个屏幕上,用户的pin会根据我的数据库进行检查,最后他会进入菜单屏幕。 现在,我不知道应该设置什么作为我的安全规则,因为身份验证是在第2步进行的,所以我不能使用“auth”来设置规则,如果没有“auth”,数据库将是

  • 我需要一些帮助来保护我的数据库。 我的数据库如下所示(我使用的是电话号码,而不是uid): 如您所见,在用户节点下有经过身份验证的用户的电话号码。我的目标是保护数据库,这样用户就可以读写自己的数据。 我尝试了以下代码,以允许每个用户读取和写入自己的数据: 但每当我在规则游乐场或我的应用程序上尝试这一点时,我都会被拒绝: 你们能帮我解决吗?