Har*_*wal 3 firebase firebase-security google-cloud-firestore
我有一个名为 firestore 的集合letters,其中包含用户的公开信。在我的应用程序中,当结果转到 时,我使用分页将结果限制为 20 个public letters screen。我担心的是,这在应用程序内可以正常工作,但如果某些恶意用户从邮递员那里查询数据库,那么我将为所有这些读取付费。我已经制定了所有安全规则,例如用户应该经过身份验证,但这需要是公共集合,所以我想不出其他任何东西来限制这一点。如何限制某人一次阅读 20 份左右的文档?
实际上没有办法根据直接查询量来限制集合的消耗。Renaud 的答案建议在安全规则中使用request.query.limit,但这并不能阻止恶意用户简单地根据需要多次调用分页 API。limit()它只是迫使他们在每个查询上提供一个。调用者仍然可以使用整个集合,并且可以根据需要多次使用它。
观看我有关该主题的视频:https://youtu.be/9sOT5VOflvQ?t=330
如果您想对要阅读的文档总数实施硬性限制,您将需要一个后端来做到这一点。客户可以从后端请求文档,最多可达其强制执行的限制。如果后端想要允许分页,则必须以某种方式跟踪所提供端点的使用情况,以防止每个调用者耗尽您想要强制执行的任何限制或配额。
正如文档中所解释的:
该
request.query变量包含 查询的limit、offset和属性。orderBy
所以你可以写这样的规则:
allow list: if request.query.limit <= 20;
Run Code Online (Sandbox Code Playgroud)
请注意,我们使用list, 而不是read。医生说:
您可以将读取规则分解为
get和list规则。规则get适用于单个文档的请求,规则适用list于查询和集合请求。
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |