【问题标题】:Security rules for real-time database in FirebaseFirebase 中实时数据库的安全规则
【发布时间】:2021-10-26 19:20:59
【问题描述】:

我正在使用 Firebase 实时数据库开发一款实时多人游戏,玩家的一举一动都会更新到数据库中。此外,我使用的是来自第三方的身份验证,而不是 Firebase 身份验证。因此,我应该将我的规则保留为:

{
 “rules”: {
 “.read”: true,
 “.write”: true
 }
}

这基本上没有任何安全性,但是由于玩家的动作将实时更新,所以这就是为什么我认为应该允许他们读取和写入我的实时数据库,有什么想法吗?只是想确定我的应用程序是否存在漏洞。谢谢!

【问题讨论】:

  • 是的,所以这是个坏主意。它使您的数据库完全开放,任何人都可以写入和读取。目前尚不清楚为什么您不想拥有安全规则,但查看入门指南Security Rules 可能会帮助您稍微细化问题,以便更清楚。

标签: firebase firebase-realtime-database


【解决方案1】:
  1. 您不能在没有 Firebase 身份验证的情况下使用安全规则(除非您将它们存储在实时数据库或 Firestore 中,正如@Doug 所指出的那样。但是,您只能在实时数据库的安全规则中访问实时数据库的数据,Firestore 也是如此)。

  2. 永远不要使用这些规则,因为它们允许任何人在数据库中读取或写入任何内容,甚至可以在几秒钟内将其擦除。

如果您使用的是第 3 方身份验证,那么您与数据库的所有连接都应通过服务器或云功能等安全环境进行。您必须自己使用 websockets 实现所有实时功能以及处理身份验证。不要忘记将规则设置为 false,以便关闭与数据库的直接连接。

通常,您会在不遵循任何安全规则的服务器上使用 Firebase Admin SDK,因此您必须确保请求资源的用户已获得授权。

【讨论】:

  • #1 并不完全正确。出于data validation 的目的,您当然可以使用不带身份验证的规则,这适用于网络和移动客户端,无论身份如何。
  • 嗨,但是如果我已经将我的数据库密钥放在 .env 文件中并将其添加到 git.ignore 中,他们如何访问我的数据库并像你说的那样把它搞砸?谢谢
  • @Codojojo 事情是您通常会在请求正文或参数中传递用户 ID。用户可以简单地传递任何 ID。现在您必须添加一个if 语句来检查是否允许用户访问他们传递的 ID 的数据,否则 Admin SDK 显然会加载数据
猜你喜欢
  • 2020-08-08
  • 2020-12-28
  • 2021-12-05
  • 2021-02-13
  • 2018-08-27
  • 2021-02-11
  • 2020-07-11
  • 2022-11-11
相关资源
最近更新 更多