当前位置: 首页 > 知识库问答 >
问题:

Firebase您的云Firestore数据库具有基本安全规则的不安全规则

雷国兴
2023-03-14

最近我收到了一系列Firebase通知,涉及:

[Firebase]您的Cloud FiRecovery数据库有不安全的规则

我们检测到您的安全规则存在以下问题:任何用户都可以写入您的整个数据库。因为您的项目没有强大的安全规则,任何人都可以访问您的整个数据库。攻击者可以窃取、修改或删除您的数据,并会抬高您的账单`

Edit2:我需要的是允许每个人都写,而不需要登录,但是只有管理员帐户应该能够从Firebase控制台读取它。

实时数据库规则:

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

云火力恢复规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow write;
    }
  }
}

编辑:JSON中的一个数据库结构,其他看起来类似:

{
  "battles" : {
    "-KjiAFLI8oE_12345678" : {
      "full" : true,
      "player1" : {
        "movement" : {
          "down" : false,
          "left" : false,
          "right" : false,
          "up" : false
        },
        "position" : {
          "x" : 0,
          "y" : 0
        }
      },
      "player2" : {
        "movement" : {
          "down" : false,
          "left" : false,
          "right" : false,
          "up" : false
        },
        "position" : {
          "x" : 0,
          "y" : 0
        }
      }
    },
    "-KjiAMVvJydR12345678" : {
      "full" : true,
      "player1" : {
        "movement" : {
          "down" : false,
          "left" : false,
          "right" : false,
          "up" : false
        },
        "position" : {
          "x" : 0,
          "y" : 0
        }
      },
      "player2" : {
        "movement" : {
          "down" : false,
          "left" : false,
          "right" : false,
          "up" : false
        },
        "position" : {
          "x" : 0,
          "y" : 0
        }
      }
    }
  }
}

Edit3:与Firebaser回复Firebase电子邮件时说我的实时数据库有不安全的规则相反,我不想/使用Firebase身份验证/SSO。

鉴于这些情况,我是否必须/应该以某种方式修改它们?

共有2个答案

卢黎昕
2023-03-14

我收到了这些电子邮件,但是没有什么可以解决我的问题,因为这就是我的系统的工作方式。

就你而言,原因是:

allow write;

在你的云端Firestore规则。这意味着任何人都可以从任何地方访问数据库。

因此,

攻击者可以窃取、修改或删除您的数据,并会抬高您的账单。

将此规则更改为仅允许经过身份验证的访问,警报应停止。卢卡S。

拓拔坚
2023-03-14

我可以想到两种解决方案,而不会危及安全(在某种程度上):

  1. 您可以对用户使用身份验证,并且只允许对经过身份验证的用户进行读或写访问。(我知道这是一个麻烦,特别是在编码游戏时。)像这样:
match /databases/{database}/documents {
    match /{document=**} {
      allow write: if request.auth != null;
    }
  }
}

例如:

match /Users-xQnFiECweq {
    match /Courses-QrmGvMgF9C {
        match /{multiSegment=**}{
            allow write;
        }   
    }
}

文档或集合名称末尾的字符串值有点像只有你知道的密码,这使得其他人很难猜测你数据库的确切结构。

我理解这是一种有点奇怪的方法,但它比只给每个人提供写权限要好。

 类似资料:
  • 我使用下面的firebase rest API访问firestore数据库数据 为了访问我的firestore数据库,我在关键部分使用了我的访问令牌,但我收到了来自firebase的电子邮件,称“[firebase]您的云firestore数据库有不安全的规则”。直到那时,我才发现任何人都可以访问我的数据库数据,即使没有有效的访问令牌 谢谢

  • 我最近收到一封来自Firebase的电子邮件,告诉我我的数据库(FiRest)的规则不安全,所以我将它们更改为以下内容: 在我有这些规则之前: 在做出改变后,电子邮件不断地回来,我不知道还能做什么。我已经尝试了以下链接中给出的几个选项,但它们都不能满足我的需要。 https://firebase.google.com/docs/rules/insecure-rules#firestore 我需要授

  • 我在中收到一条消息,告诉我我的项目有不安全的规则。但当我检查它时,我不太明白什么是不安全的。 它显示如下: 我保留了读取访问权限,因为它支持一个网站。所以任何访问该网站的人都应该能够读取数据。 至于写权限,据我所知,我是唯一能写的人。 请注意,我还有第三个系列(CollectionThree),规则中没有提到。这可能是原因吗? 除此之外,我还可以想象,只有web服务器可以获得读取权限,以便将内容提

  • 在Firestore中,我有一个拥有所有者的项目集合。 所有者可以是用户,应该允许用户读取其文档。 使用可以执行以下操作: 但是对于引用字段,在涉及安全规则时似乎没有任何文档。 我尝试了以下安全规则: 并如下所示进行查询: 但我仍然缺少或权限不足。

  • 我创建了一个应用程序,它使用Firebase实时数据库。我对安全规则有一个很大的问题。我的用户不需要登录使用应用程序,他们可以发送数据到数据库,无需任何身份验证。例如:这是一个简单的游戏,他们可以互相玩,然后他们可以保存分数。我想创建一个安全的数据库,但是任何人都可以写

  • null 基本上数据结构如下所示: 问题是,我应该写什么安全规则来允许用户只在他们所属的组中(拥有组密钥)读取、创建和更新数据?同时,如何禁止用户找出其他群组的密钥?