【问题标题】:How to limit documents in a collection in Firebase Firestore如何在 Firebase Firestore 中限制集合中的文档
【发布时间】:2019-06-14 09:46:11
【问题描述】:

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

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

有人有建议吗?

【问题讨论】:

标签: firebase google-cloud-firestore


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 2021-03-18
    • 2018-10-21
    • 1970-01-01
    • 2021-02-20
    • 2021-01-23
    • 2019-04-02
    • 2019-11-04
    • 2019-01-29
    相关资源
    最近更新 更多