我需要帮助来确定我的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的文档读写数据(客户端/服务器不能使用名称777777或999999)。
•在任何情况下,任何人都不能访问数据库中存在的文档列表或任何这些文档的名称。
我必须强制执行此行为的安全规则是:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
现在,让我们说数据库中的所有userids实际上都是唯一代表每个用户的SHA256哈希值。假定仅用户知道此SHA256哈希,此设置是否安全,因为从文档中读取/写入文件时您需要知道用户哈希?有人可以通过某种方式找出数据库中所有文档的名称吗?
根据您当前的规则,任何人都可以从数据库中准备任何东西。他们不仅可以get每个单独的文档,而且(据我所知),一旦知道了它们所在的集合,他们还可以list所有文档。因为userids
不是那很难猜,我会说你在这里很容易受到虐待。
更安全的做法是,仅当他们知道文档的完整路径/ ID时才允许他们获取文档,而不允许他们在集合中列出文档。您可以使用更多的granular rules of Firestore,将read
分解为list
和get
。
一个文档。rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow get; } } }
如果他们知道文档的完整路径,但不获取所有文档的列表,这将允许他们get