firebase - 当某些恶意用户查询数据时,如何限制从 Firestore 中的庞大集合中读取文档的数量?
问题描述
我有一个名为 firestore 的集合letters
,其中包含来自用户的公开信。在我的应用程序中,我使用分页将结果限制在 20 个public letters screen
。我担心的是,这在应用程序中可以正常工作,但如果某些恶意用户从邮递员那里查询数据库,那么我将为所有这些读取支付高额费用。我已经制定了所有安全规则,例如应该对用户进行身份验证,但这需要是公共集合,所以我想不出其他任何东西来限制这一点。如何限制某人一次阅读大约 20 个文档?
解决方案
实际上没有办法根据直接查询量来限制对集合的消耗。Renaud 的回答建议request.query.limit
在安全规则中使用,但这并不能阻止恶意用户简单地根据需要对分页 API 进行尽可能多的调用。limit()
它只是迫使他们在每个查询中提供一个。调用者仍然可以使用整个集合,并且可以根据需要多次使用它。
观看我关于该主题的视频:https ://youtu.be/9sOT5VOflvQ?t=330
如果您想对要阅读的文档总数实施硬性限制,您将需要一个后端来执行此操作。客户端可以从后端请求文档,直到它强制执行的限制。如果后端想要允许分页,它必须以某种方式跟踪所提供端点的使用情况,以防止每个调用者用尽您想要强制执行的任何限制或配额。
推荐阅读
- python - 如何在 django 模板中打印查询集字典
- python - Flask-Marshmallow AttributeError: List Object has no Attribute 'data'
- docker - 在 docker 中调用 iptables 导致“操作不支持”
- python - python中wasserstein距离函数的参考
- reporting-services - ReportItems 按分组求和
- python - 如何保持行与组的第一个值(str)?
- r - How can I fill in missing values from the value on the left in R, but only for 1 row?
- python - 如何根据数组中的值拆分数组?
- laravel - 未找到列:1054 Champ 'DAY(datep)' inconnu
- c# - Windows Identity Foundation 支持停止,这是什么意思?