如何在Firebase Firestore中限制集合中的文档

时间:2019-01-21 01:41:30

标签: firebase google-cloud-firestore

我的用户可以在带有大量安全规则的子集合中创建文档(例如任务),以检查身份验证,权限和数据有效性。他们甚至可以选择多个任务并将其复制到同一集合中。 现在,普通用户可能一次最多可以创建一百个任务,但是如果有恶意的人设法获取我的数据库凭据,进行身份验证并尝试以编程方式创建大量有效文档怎么办?这将导致Firestore扩展没有问题,并且Firebase账单出现意外情况。 这是我的第一个问题,但是我也在考虑是否有可能出于其他原因限制馆藏规模,同时也是解决上述问题的一种方法。

我阅读了有关Firestore文档中描述的对集合中的文档进行计数的技术,但没有找到解决方案。 在我的情况下,在云功能中使用事务更新对doc字段进行更新会效率低下。分布式计数器增加了我的数据模型的复杂性,而且我也不知道如何为每个任务创建正确地读取安全规则中的那些计数器,即使那将是一个有效的解决方案。

有人建议吗?

1 个答案:

答案 0 :(得分:0)

我相信一个人获得对您的数据库的读/写访问权限的方式将是入侵Google服务器,在这种情况下,没有人是安全的,这与您的操作无关紧要,或者猜测您的收藏和文件的确切名称。

  1. 对于后一种情况,我在项目中所做的是,对于每个集合和文档,我都使用了想要的名称以及随机的10个字符的字符串(包括各种字符和数字。例如{{1 }})哪种方式在每个步骤中都是独立的独立密码。至少,这使得很难猜测集合和文档的名称。
  2. (就像问题中提到的一样)如果使用身份验证不会给您的项目造成任何麻烦,您可以使用它通过限制仅通过应用程序进行身份验证的用户的访问来进一步提高数据库的安全性。
  3. 我猜(从未尝试过)您可以根据自己的标准使用Users-x5NfaS1jCb来限制任何给定集合中可用的文档数。每当在数据库中创建一个事件时,就会调用此函数。

如果通过“获取我的数据库凭据” ,您的意思是找到Firebase帐户的用户名和密码,那么再次执行操作并不重要。如果他们知道自己在做什么,他们将获得许多好处,以至于这个问题将成为您最少的问题。

总的来说,如果您问我,您的数据库是安全的,除非有人猜到您的收藏和文档名称,或获得对您的Firebase帐户的访问权限。

这些是我目前唯一能想到的。我稍后将尝试更新答案。