【问题标题】:Firebase Realtime Database Security Rules ( Read And Write )Firebase 实时数据库安全规则(读写)
【发布时间】:2022-11-11 11:30:15
【问题描述】:

好的,我有一个连接到应用程序的实时数据库,直到今天,规则(读取和写入)都设置为 true,一切正常....但是每次弹出一条消息说

您的安全规则被定义为公开的,因此任何人都可以窃取、修改或删除您数据库中的数据

我尝试了几件事,但没有访问数据...只有在规则设置为 true 时才能访问数据

但是有什么办法可以修改规则以使其更安全

我希望只有少数已知应用程序(我的应用程序)可以访问此数据

【问题讨论】:

  • 我们无法帮助解决当前形式的问题。我建议特别关注您尝试的内容,并阅读how to create a minimal, complete, verifiable example(如果需要,请再次阅读),因为遵循那里的指导会大大增加这里有人可以提供帮助的机会。
  • Okkk...所以除非有人可以访问我的 Google 帐户或与我的数据库集成的应用程序/网络...即使规则设置为 true,也没有人可以访问数据,对吗?

标签: firebase-realtime-database firebase-security


【解决方案1】:

开始here in the docs 并逐步完成。它非常实用且易于理解。

只有在规则设置为 true 时才能访问数据

Firebase RTDB 有一个公共 URL,因此任何人都可以尝试连接到它。决定他们是否可以这样做是您的工作。如果您对任何路径/节点的规则如下所示,那么任何提出请求的人都可以使用它:

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

如果您只想让您的应用程序的用户连接到 RTDB,您可以使用 Firebase Auth 并使用如下条件:

{
  ".read": "auth != null"
  ".write": "auth != null"
}

我希望只有少数已知应用程序(我的应用程序)可以访问此数据

访问是在用户级别上确定的,而不是由应用程序确定的。开始here in the docs

但是有什么办法可以修改规则以使其更安全

在 Firebase 控制台中,或通过 CLI 部署它们。如果您对此不熟悉,请从 Firebase 控制台开始,并使用规则游乐场来测试不同的规则。 See docs for more information

因此,除非有人可以访问我的 Google 帐户或与我的数据库集成的应用程序/网络......即使规则设置为 true,也没有人可以访问数据,对吗?

您的数据库不是“集成的”。它是一个可通过公共 URL 访问的已部署实例 - 这就是您的客户端连接到 RTDB 的方式。如果你的规则允许任何读或写操作,那么您的数据库对所有人开放。因此,您收到的电子邮件通知您这是不安全的。

【讨论】:

【解决方案2】:
{
  "rules": {
   ".read": "auth.uid !== null",
   ".write": "auth.uid !== null"
  }
}

当前接受的规则docs

【讨论】: