【问题标题】:Firebase Realtime Database Security for Private Single-Developer User面向私有单一开发人员用户的 Firebase 实时数据库安全性
【发布时间】:2020-10-29 11:06:19
【问题描述】:

我有一个 React 应用程序,我为自己在 localhost 开发模式下使用而开发。

  • 该应用将一些数据存储到我仅为该项目创建的 Firebase 实时数据库中。
  • 没有身份验证,因为只有我在开发模式下使用它。

firebase 数据库上的规则是默认规则:

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

因此,firebase 提醒我注意常规:'Your security rules are defined as public, so anyone can steal, modify...' - warning

我的理解是,在这种情况下,有人可以访问我的数据的唯一方法是他们掌握了有关 firebase 实例的信息,例如 apiKey、数据库 URL、authDomain。这是真的? (或者在这种情况下,人们是否可以通过其他直接的方式访问数据,显然不是在谈论入侵我的计算机/谷歌帐户等。

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

PS:我确实了解如何为“普通”用户应用设置 firebase 数据库安全性。但是,在这种特殊情况下,我认为不需要它,这是正确的吗?

非常感谢。

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-security


    【解决方案1】:

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

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

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

    {
      "rules": {
        ".read": "auth.uid === 'your_uid''",
        ".write": "auth.uid === 'your_uid''" 
      }
    }
    

    即使是简单的更改也已经使您的数据库更加更加安全,因为现在只有一个用户可以访问数据。

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

    【讨论】:

    • 谢谢弗兰克,既然你这么说,让它更安全确实有意义,而且我知道如何设置身份验证,所以我可以这样做。所以只是我理解你关于知道 URL 的评论。有人只需要我的数据库 URL 就可以访问数据库,即使我没有部署任何链接到数据库的应用程序?
    • 感谢弗兰克,您不仅回答了我的问题,而且我接受了您的建议,以极大地提高安全性,因为正如您所说,确实没有充分的理由不这样做。
    【解决方案2】:

    使用 API 密钥、数据库 URL、身份验证域等,您的最终应用程序与服务器建立连接。简而言之,您所有的 API 密钥、数据库 URL、身份验证域等都是公开可用的。但这不是问题,除非您的安全规则到位,以保护您的数据不被探索。 Read more about Security Rules.

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

    1. 使用身份验证:这是跟踪用户以及用户可以访问或修改的数据的最简单方法。

    注意:永远不要相信来自用户的数据。您必须验证来自用户的每一个数据。

    1. 函数的使用:函数有一个特殊的属性——它们可以绕过安全规则。 记住不要将所有数据暴露给用户/开放世界。您可以将数据发送到调用的函数,并让所有函数处理所有逻辑。从财务和请求/响应的角度来看,这种方法成本很高。

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 2019-10-09
      • 2020-12-28
      • 2023-02-13
      • 2020-11-27
      • 2019-01-07
      • 2019-07-17
      • 2020-01-15
      • 2012-01-03
      相关资源
      最近更新 更多