firebase - 如何在 Firebase Firestore 中限制集合中的文档
问题描述
我的用户可以在一个子集合中创建文档(比如说任务),其中包含一组用于检查身份验证、权限和数据有效性的安全规则。他们甚至可以选择多个任务并将它们复制到同一个集合中。现在,一个普通用户可能一次最多创建一百个任务,但是如果有恶意的人设法获取我的数据库凭据,进行身份验证并尝试以编程方式创建大量有效文档怎么办?这将导致 Firestore 扩展没有问题,并在我的 Firebase 计费中出现意外的惊喜。这是我首先关心的问题,但我也在考虑出于其他原因限制集合大小的可能性,这同时也是所描述问题的解决方案。
我阅读了 Firestore 文档中描述的对集合中的文档进行计数的技术,但我没有找到解决方案。在我的情况下,使用云功能中的事务更新文档字段上的计数器将是低效的。分布式计数器稍微增加了我的数据模型的复杂性,而且我不知道如何在每个任务创建的安全规则中正确读取这些计数器,即使这将是一个有效的解决方案。
有人有建议吗?
解决方案
我相信一个人获得对你的数据库的读/写访问权限的方法是要么破解谷歌服务器,在这种情况下,没有人是安全的,你做什么并不重要,或者猜测的确切名称您的收藏和文件。
- 至于后一种情况,我在我的项目中所做的是,对于每个集合和文档,我都使用了我想要的名称加上随机的 10 字符字符串(包括各种字符和数字。例如
Users-x5NfaS1jCb
)作为每一步都有独立的、单独的密码。至少,这使得猜测集合和文档的名称变得困难。 - (就像问题中提到的那样)如果使用身份验证不会对您的项目造成任何复杂性,您可以使用它通过限制仅通过您的应用程序进行身份验证的用户访问来进一步提高数据库的安全性。
- 我想(从未尝试过)您可以
Firebase Functions
根据您想要的标准来限制任何给定集合中可用的文档数量。每次在数据库中创建事件时都会调用此函数。
如果通过“获取我的数据库凭据”,您的意思是找到您的 Firebase 帐户的用户名和密码,那么您再次做什么并不重要。如果他们知道自己在做什么,他们就可以利用很多优势,以至于这个特定问题将是您遇到的最少问题。
总而言之,如果你问我,你的数据库是安全的,除非有人猜到了你的集合和文档名称,或者可以访问你的 Firebase 帐户。
目前我能想到的就只有这些了。我稍后会尝试更新我的答案。
推荐阅读
- c++ - Unsigned char * 产生奇怪的字符,使其总是无法比较
- kubernetes - 将流量从 GCP 虚拟机路由到 VPC Native Cloud DNS GKE 集群
- r - 在shinywidget的下拉()下的multiInput()中选择后下拉消失
- typescript - 找不到模块“firebase”或其相应的类型声明。React + TypeScript + Firebase
- angular10 - mmenu-light 在 Angular 10 中引发错误。我该如何解决?
- google-apps-script - 使用 Google Apps 脚本提取当前价格变化百分比(Google 财经)
- python - 如果在另一个 CSV 文件中找到行值,则从 CSV 文件中过滤行
- c# - 我将如何忽略通过 websocket 发送的错误数据。在这种情况下,我试图阻止字符串数据被接受和使用
- ios - Swift 有没有办法检查 NSCrossWebsiteTrackingUsageDescription 状态
- javascript - ajax 代码在 django 应用程序上不起作用