【问题标题】:Issue with my Firebase realtime data base security rules我的 Firebase 实时数据库安全规则问题
【发布时间】:2021-01-14 01:13:21
【问题描述】:

我有以下 Firebase 实时数据库规则:

{
   "rules": {
       ".read" : "auth != null",
       ".write": false,

       "Games": {
           ".indexOn" : "WeekId"
       },
       "Version": {
           ".read" : true
       }
       ...
}

我不断收到来自 Google 的以下电子邮件:

[Firebase] 您的实时数据库“xxx-9e542”的规则不安全`

我们检测到您的安全规则存在以下问题: 任何登录用户都可以读取您的整个数据库 如果没有强大的安全规则,任何拥有您数据库地址的人都可以对其进行读/写,从而使您的数据容易受到攻击者窃取、修改或删除数据以及创建代价高昂的操作的攻击。

因此,根据我上面的规则,我知道,我已经制定了规则,允许登录用户读取Games 节点,并且所有用户都可以读取Version 节点,即使是未经身份验证的用户。

据我所知,它需要这样,因为我要求所有登录用户都能够访问Games 节点信息,否则他们将如何查看他们可以从中选择的游戏列表!?

至于Version 节点,我在我需要下载我的应用程序的每个人“强制升级”我的应用程序的情况下使用它,因为需要进行更改。在这种情况下,我需要下载了我的应用程序的旧版本并且“已登录”或“未登录”的用户并强制他们更新应用程序,否则他们将无法使用它。

任何人都可以告诉我,如果我不了解我的安全规则结构,或者这是否“正常”并且我收到的电子邮件只是作为仅供参考!?

其他人是如何制定规则的!?或者设置安全规则的“最佳实践”是什么!?尤其是如果您需要登录用户 24/7 全天候访问任何特定节点的信息!?

【问题讨论】:

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


    【解决方案1】:

    您当前规则的主要问题是任何人都可以通过 API 登录并读取您的整个数据库,即使他们对您的应用程序一无所知。他们可以只读取数据库的根目录,然后开始查看您的数据。

    提高安全性的第一步是不允许在顶层读取,而只允许在较低层读取:

    {
       "rules": {
           ".write": false,
    
           "Games": {
               ".read" : "auth != null",
               ".indexOn" : "WeekId"
           },
           "Version": {
               ".read" : true
           }
           ...
    }
    

    现在没有人可以从根目录读取,您必须知道GamesVersion 节点存在才能读取它。

    【讨论】:

    • 啊啊啊啊我明白了!!!谢谢你的提示!!!我当时很“懒惰”,并将 `".read" : "auth != null" 放在根目录下,以免我不得不在每个节点上重复它……我想安全和懒惰从来都不是一个好的组合。 ..
    猜你喜欢
    • 2018-08-27
    • 2021-06-20
    • 2020-08-08
    • 2020-12-28
    • 2021-10-26
    • 2021-12-05
    • 2020-10-19
    • 2021-02-13
    相关资源
    最近更新 更多