gpt4 book ai didi

firebase-realtime-database - Firebase 实时数据库的这些默认安全规则是什么意思?

转载 作者:行者123 更新时间:2023-12-04 12:32:58 28 4
gpt4 key购买 nike

我在 Firebase 上创建了一个新项目,并在其中创建了一个实时数据库。当被问及我的数据库的安全规则时,我选择在测试模式下启动。
现在 Firebase 控制台中我的数据库的安全规则显示为:

{
"rules": {
".read": "now < 1622790000000", // 2021-6-4
".write": "now < 1622790000000", // 2021-6-4
}
}
这些规则是什么意思?我怎样才能将它们更改为更安全?

最佳答案

这些默认的测试模式规则是一个简单的包罗万象的规则,它允许世界上的每个人在给定日期之前读取和写入您的数据库。
让我们分解规则,看看它们是如何工作的:

  • ".read"".write" "rules" 下的节点确定谁可以读/写整个数据库中的数据。
  • now variable由 Firebase 自动设置为服务器上的当前时间。该值在 milliseconds since the epoch ,这是在 Firebase 中也存储时间戳的推荐值。
  • 1622790000000规则中的值是 future 某个时间点的时间戳。让我们以更易读的日期格式来看看这个值是什么:

       console.log(new Date(1622790000000))


    "2021-06-04T07:00:00.000Z"



  • 因此,任何人都可以在 2021 年 6 月 4 日之前读取或写入我们数据库中的所有数据。在那之后,任何人都无法再使用客户端 SDK 访问数据。 Firebase Admin SDKs完全绕过这些规则,因此它们不受影响。

    我可以延长时间吗?
    您可能从 Firebase 收到了这样的消息:

    You chose to start developing in Test Mode, which leaves your Realtime Database instance completely open to the Internet. Because this choice makes your app vulnerable to attackers, your database security rules were configured to stop allowing requests after the first 30 days. In 5 day(s), all client requests to your Realtime Database instance will be denied.


    此消息意味着由于安全规则中的时间戳,对您的数据的访问即将到期。
    将测试模式扩展到另一个截止日期实际上非常容易。您需要做的就是更改 1622790000000值(value)。例如,要延长到 7 月 4 日,我可以将值设置为 1625382000000 .
    为了确定要使用的值,我运行了这个小小的 JavaScript 片段:

       console.log(new Date("2021-07-04T07:00:00.000Z").getTime())

    这是另一个 tool来计算这些值。
    通过使用 1625382000000我们将测试模式延长了一个月,直到 2021 年 7 月 4 日,每个人都可以读/写整个数据库。

    如何更好地保护数据?
    在某些时候,您应该想出一种更好的方法来保护您的(用户)数据,而不仅仅是在特定日期之前打开它。当我开始一个项目时,我通常会正确地做这件事,但如果你稍后开始它也没关系。
    重要的是你应该 将服务器端安全规则与您的应用程序的客户端源代码相同 .
    我同时开发我的代码和规则。所以:
  • 我从一个完全封闭的数据库开始,因为还没有需要访问任何数据的代码。
  • 我手动将一些数据添加到数据库中,并编写代码来读取它。在这一点上,我编写了只允许对特定数据进行读访问的安全规则。所以它可能是 ".read": true ,但它会在我的 JSON 结构中更深入。即使是这样简单的规则也已经阻止了许多不良行为者。
  • 我第一次希望应用程序写入数据库也是在我添加身份验证时。通常我从匿名身份验证开始,因为它不需要我输入任何凭据。
    然后我将硬编码的 UID 包含在我的安全规则中,以确保只有我可以写入数据。您仍然经常会发现这个顶级 ".write": "auth.uid === 'hardcodedUidOfPufsAnonymousUser'"在我添加适当的数据所有权之后,在我的规则中。
    使用 Firestore 时,我有时会按照此处的说明进行改进:User conflict when using same Auth method for Admin and Normal users | Firebase Auth
  • 在我添加(通常是列表)数据的任何时候,我都会考虑谁“拥有”这些数据,以及谁可以读取它。然后我扩展我的规则以允许该访问,仅此而已。

  • 这需要在我编写代码时更新我的​​安全规则会减慢我编码的速度,但无论如何我都会很乐意这样做。在每一步都确保我数据库中的数据安全,让我可以让人们放心地访问应用程序/数据库。我建议你也这样做。
    有关更多信息,我建议阅读:
  • security rules 上的 Firebase 文档,其中包含这些常见用例的示例:
  • Content-owner only access
  • Public read, private write access
  • Attribute and role based access
  • All authenticated users可以读/写所有数据
  • 关于firebase-realtime-database - Firebase 实时数据库的这些默认安全规则是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67408642/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com