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

实时数据库从不安全到安全的规则,无需中断服务

申光临
2023-03-14

今天,我收到一封邮件,上面写着,

[Firebase]您的实时数据库“CC default rtdb”有不安全的规则,任何用户都可以读取您的整个数据库,任何用户都可以写入您的整个数据库

我的服务器每天都在运行,以便在实时数据库中存储值。当我开始这个Firebase项目时,我使用了基本的读写规则。

json prettyprint-override">{
  "rules": {
    ".read": true,
    ".write": true
  }
}

如果我现在更改规则,是否会影响我的外部节点。JS服务器无法将值存储到实时数据库中?

我甚至从移动应用程序访问这个数据库,所以如果规则发生变化,它会影响移动应用程序读取数据吗?

如何在不中断外部服务器和移动应用程序访问的情况下保护这些实时数据库规则(从公共到私有)?重要的是,我的外部服务器访问不得中断。

共有1个答案

商和雅
2023-03-14

如果通过身份验证(登录)访问数据库,可以将节点设置为auth=空,因此任何未经授权的用户都无法访问它们。

您需要遵循以下步骤:

  1. 对于需要公开的所有节点,将read设置为true
  2. 将读/写设置为auth=空用于所有要向任何授权用户提供的节点
  3. 为任何需要特殊访问权限的节点设置自定义验证规则(例如:用户只能写入其数据)

根据屏幕截图,如果任何人掌握了你的项目id,他们可以html" target="_blank">修改和窃取你的整个数据库。

您需要以与您的用例适当匹配的方式设置规则。据我所知:

  • 允许外部服务器帐户访问整个数据库
  • 允许移动应用有条件访问(可能由用户?)

以这个数据库为例:

{
  "top_level": {
    "users": [
      {
        "username": "X",
        "userId": "0"
      },
      {
        "username": "Y",
        "userId": "1"
      }
    ],
    "public_data": {
      "news": [
        {
          "title": "X",
          "body": "Y"
        }
      ]
    }
  }
}

我想设定:

  • 节点新闻可以公开阅读(无auth)
  • 节点用户只能供其他登录用户读取(auth)
  • 节点用户的子节点只能为其id与节点userId中的值匹配的用户写

在这种情况下,规则是:

{
  "rules": {
    ".read": false,
    ".write": false,
    "top_level": {
      "users": {
        ".read": "auth!=null", 
        "$user_id": {
          ".write": "auth!=null && data.child('userId').val()===auth.uid"
        }
      },
        "news" : {
          ".read":true
        }
    }
  }
}

注意,顶层中设置为true的规则会覆盖内部规则。如果需要澄清,请发表评论。

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

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

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

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

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

  • 我需要一些帮助来保护我的数据库。 以下是我的安全规则: 我尝试了以下代码,以允许每个用户读取和写入自己的数据: 我的数据库如下所示(我使用的是电话号码,而不是uid): 但是由于某种原因,当我运行Firebase规则游乐场时,给定的auth.token.phone数等于我给出的确切位置,例如,我被拒绝读取选项。 这也发生在我的应用程序中,你们能帮我解决吗?