首页 > 解决方案 > 如何在 Firebase Firestore 中限制集合中的文档

问题描述

我的用户可以在一个子集合中创建文档(比如说任务),其中包含一组用于检查身份验证、权限和数据有效性的安全规则。他们甚至可以选择多个任务并将它们复制到同一个集合中。现在,一个普通用户可能一次最多创建一百个任务,但是如果有恶意的人设法获取我的数据库凭据,进行身份验证并尝试以编程方式创建大量有效文档怎么办?这将导致 Firestore 扩展没有问题,并在我的 Firebase 计费中出现意外的惊喜。这是我首先关心的问题,但我也在考虑出于其他原因限制集合大小的可能性,这同时也是所描述问题的解决方案。

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

有人有建议吗?

标签: firebasegoogle-cloud-firestore

解决方案


我相信一个人获得对你的数据库的读/写访问权限的方法是要么破解谷歌服务器,在这种情况下,没有人是安全的,你做什么并不重要,或者猜测的确切名称您的收藏和文件。

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

如果通过“获取我的数据库凭据”,您的意思是找到您的 Firebase 帐户的用户名和密码,那么您再次做什么并不重要。如果他们知道自己在做什么,他们就可以利用很多优势,以至于这个特定问题将是您遇到的最少问题。

总而言之,如果你问我,你的数据库是安全的,除非有人猜到了你的集合和文档名称,或者可以访问你的 Firebase 帐户。

目前我能想到的就只有这些了。我稍后会尝试更新我的答案。


推荐阅读