我的Firebase Cloud Firestore数据库是安全的还是容易受到攻击的?

问题描述 投票:0回答:1

我需要帮助来确定我的Firebase Cloud Firestore设置是否安全或容易受到黑客攻击。

在数据库中,我有一个名为userids的集合,其中包含许多文档。每个文档都包含与用户相关的数据,该用户的用户名是文档的名称。一个例子是:

userids (collection)
    123456 (document)
        field1: "..."
        field2: "..."
        field3: "..."
    777777 (document)
        field1: "..."
        field2: "..."
        field3: "..."
    999999 (document)
        field1: "..."
        field2: "..."
        field3: "..."

我需要具备的功能如下:

•给定诸如userid=123456之类的用户ID,客户端或服务器必须只能对名称等于123456的文档读写数据(客户端/服务器不能使用名称777777999999)。

•在任何情况下,任何人都不能访问数据库中存在的文档列表或任何这些文档的名称。

我必须强制执行此行为的安全规则是:

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

现在,让我们说数据库中的所有userids实际上都是唯一代表每个用户的SHA256哈希值。假定仅用户知道此SHA256哈希,此设置是否安全,因为从文档中读取/写入文件时您需要知道用户哈希?有人可以通过某种方式找出数据库中所有文档的名称吗?

firebase hash google-cloud-firestore firebase-security-rules
1个回答
0
投票

根据您当前的规则,任何人都可以从数据库中准备任何东西。他们不仅可以get每个单独的文档,而且(据我所知),一旦知道了它们所在的集合,他们还可以list所有文档。因为userids不是很难猜,我会说你在这里很容易受到虐待。

更安全的做法是,仅当他们知道文档的完整路径/ ID时才允许他们获取文档,而不允许他们在集合中列出文档。您可以使用更多的granular rules of Firestore,将read分解为listget

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

如果他们知道文档的完整路径,但不获取所有文档的列表,这将允许他们get

一个文档。
© www.soinside.com 2019 - 2024. All rights reserved.