首页 > 解决方案 > 当某些恶意用户查询数据时,如何限制从 Firestore 中的庞大集合中读取文档的数量?

问题描述

我有一个名为 firestore 的集合letters,其中包含来自用户的公开信。在我的应用程序中,我使用分页将结果限制在 20 个public letters screen。我担心的是,这在应用程序中可以正常工作,但如果某些恶意用户从邮递员那里查询数据库,那么我将为所有这些读取支付高额费用。我已经制定了所有安全规则,例如应该对用户进行身份验证,但这需要是公共集合,所以我想不出其他任何东西来限制这一点。如何限制某人一次阅读大约 20 个文档?

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


实际上没有办法根据直接查询量来限制对集合的消耗。Renaud 的回答建议request.query.limit在安全规则中使用,但这并不能阻止恶意用户简单地根据需要对分页 API 进行尽可能多的调用。limit()它只是迫使他们在每个查询中提供一个。调用者仍然可以使用整个集合,并且可以根据需要多次使用它。

观看我关于该主题的视频:https ://youtu.be/9sOT5VOflvQ?t=330

如果您想对要阅读的文档总数实施硬性限制,您将需要一个后端来执行此操作。客户端可以从后端请求文档,直到它强制执行的限制。如果后端想要允许分页,它必须以某种方式跟踪所提供端点的使用情况,以防止每个调用者用尽您想要强制执行的任何限制或配额。


推荐阅读