面向私有单个开发人员用户的Firebase实时数据库安全

面向私有单个开发人员用户的Firebase实时数据库安全,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有一个React应用程序,是我在本地主机开发模式下为自己开发的 该应用程序将一些数据存储到我为项目创建的firebase实时数据库中 没有身份验证,因为只有我在开发模式中使用它 firebase数据库上的规则为默认规则: { "rules": { ".read": true, ".write": true } } 因此,firebase提醒我注意一个常见的问题:“您的安全规则被定义为公共的,因此任何人都可

我有一个React应用程序,是我在本地主机开发模式下为自己开发的

  • 该应用程序将一些数据存储到我为项目创建的firebase实时数据库中
  • 没有身份验证,因为只有我在开发模式中使用它
firebase数据库上的规则为默认规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
因此,firebase提醒我注意一个常见的问题:
“您的安全规则被定义为公共的,因此任何人都可以窃取、修改…”-警告

我的理解是,在这种情况下,人们能够访问我的数据的唯一方式是,如果他们掌握了有关firebase实例的信息,例如apiKey、数据库URL、authDomain。这是真的吗?(或者,在这种情况下,是否有其他直接的方式让人们可以访问数据,显然不是说黑客入侵我的电脑/谷歌账户等等

这些数据对我来说很重要,所以基本上我想知道我目前的做法是否安全

PS:我确实了解如何为“普通”用户应用程序设置firebase数据库安全性。但是,在这个特定的情况下,我相信它是不需要的,对吗


非常感谢。

任何知道项目URL的人现在都可以读取和写入您的数据。他们可以通过一个命令删除您的整个数据库。虽然这可能正是您想要的(这就是Firebase允许的原因),但大多数应用程序都需要对其数据进行更多的控制访问(这就是为什么您会收到Firebase发出的警报)

你最好的选择是将Firebase身份验证添加到你的应用程序中。这样你就可以确保你确实是唯一使用它的人。现在你关于这一点的陈述是基于你相信没有人可以访问你的URL的假设。通过实施身份验证,你实际上可以确保你是唯一有权访问你的URL的人数据

这可能与实现一样简单,即为用户生成一个ID,而不需要他们提供任何凭据。如果您随后记录该ID,则可以使用如下规则将对数据库的访问限制为该用户:

{
  "rules": {
    ".read": "auth.uid === 'your_uid''",
    ".write": "auth.uid === 'your_uid''" 
  }
}
即使是这个简单的更改也已经使数据库更加安全,因为现在只有一个用户可以访问数据


我强烈建议您花一些时间阅读更多有关Firebase的信息,然后保护您的数据库。这不仅可以消除警报,而且(更重要的是)它确保仅以您控制的方式访问数据。

使用API密钥、数据库URL、身份验证域等,您的最终应用程序与服务器建立连接。简言之,您的所有API密钥、数据库URL、身份验证域等都是公开可用的。但这不是问题,除非您制定了安全规则进行保护你的数据不会被浏览

有几个简单的步骤可以保护或保护您的数据:[这些是我的提示]

  • 使用身份验证:这是跟踪用户以及用户可以访问或修改的数据的最简单方法
  • 注意:永远不要信任来自用户的数据。您必须验证来自用户的每个数据

  • 函数的使用:函数有一个特殊属性-它们可以绕过安全规则。记住不要向用户公开所有数据/open world。您可以将数据发送到调用的函数,并让所有函数处理所有逻辑。从财务和请求/响应视图来看,这种方法成本高昂
    谢谢Frank,既然你这么说了,让它更安全是有意义的,我知道如何设置身份验证,所以我可以这么做。所以我理解你关于知道URL的评论。有人只需要我的数据库URL来访问数据库,即使我没有部署任何链接到数据库的应用程序?在某种程度上,一个ny URL是可猜测的。您必须确定您的URL的可猜测性,但我想说的是,我的“不要相信没有人会对此进行罚款”列表中有任何常用词的组合。如果我的答案有用,请单击“向上投票”按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样其他人就知道你得到了(足够的)帮助。还要感谢弗兰克,你已经回答了我的问题,我接受了你的建议,大大提高了安全性,因为,正如你所说,没有理由不这样做。