【问题标题】:Eliminate from reading ALL collection, allow only a few documents?消除阅读所有集合,只允许几个文件?
【发布时间】:2019-10-17 02:48:02
【问题描述】:

我们有一个包含许多文档的集合,这是业务的“主要”数据源。

这个集合有一个阅读规则,使它对所有人(非用户)开放,因为这就是这个集合的目的。

我想让任何人合理地阅读此集合中的文档,这意味着消除黑客查询此集合中的所有文档立即收集只是为了评估我的业务规模。

不过,让无用户(任何人/公众)一次查询多个文档(因为某些页面需要这样做,但它的文档数量非常少)

我找不到一个规则可以让您在一个查询中阻止查询超过 X 个文档(比如说 40 个)

【问题讨论】:

    标签: firebase google-cloud-firestore firebase-security


    【解决方案1】:

    请务必注意,Frank 的检查request.query.limit 的答案将限制单个查询的大小。但是,检查规则中的限制并不能阻止黑客使用pagination 执行多个查询以获取集合的全部内容。它只限制查询中传递给limit() 的值。

    如果您需要对用户可以执行的查询类型进行更多控制,您可以使用Cloud Functions HTTP function(或您控制的其他一些后端)为查询创建 API 端点,并设置安全规则以防止所有直接访问收藏。

    【讨论】:

    • 非常感谢。我知道分页,但试图避免为此编写函数。我可以阻止同一个 IP 执行多个请求,或者在一个时间窗口内阻止一定数量的请求吗?
    • Cloud Firestore 没有基于 IP 的控件。
    【解决方案2】:

    您正在寻找request.query.limit。来自文档:

    // Limit documents per request to 50
    allow list: if request.query.limit <= 50
    

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多