【问题标题】:Add a limit for data reads firebase firestore为数据读取添加限制 firebase firestore
【发布时间】:2020-04-09 15:13:21
【问题描述】:

我们有一个使用 Firestore 的 iOS 应用。该应用程序只读取数据(不写入),我们没有用户帐户,数据库上的任何内容都必须受到保护。出于这个原因,我们使用了这些幼稚的安全规则

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
       allow read;
    }
  }
}

但是,Firebase 已经警告我们(当然,有充分的理由)这会使我们处于危险之中,原因有两个:

  1. 任何用户都可以从数据库中读取任何内容,因此没有什么是安全的。

我不认为这是一个问题,因为我们没有什么必须保密的。至少现在,当然,这可能会改变。

  1. 允许无限读取

这就是问题所在。我想恶意用户可能会读取我们的数据库数百万次,从而关闭我们或只是强迫我们支付大笔账单(我们使用 Blaze 计划,即付即用)。

我们怎样才能保护我们免受这种伤害?我在这里看到过类似的问题,但他们没有提供任何有用的建议,How to limit rate of data reads from Firebase?

我的想法是我们可以在应用程序中使用匿名用户帐户,然后在我们的安全规则中只允许在用户“登录”时读取(因此任何人都在使用该应用程序)。我远不是 Firebase 和安全问题方面的专家,但这至少不会让某人更难或不可能因为必须通过应用程序来读取我们的数据库数百万次吗?

还有其他建议我们可以如何解决这个问题吗?

【问题讨论】:

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


    【解决方案1】:

    一旦您允许对文档进行读取访问,实际上并没有办法限制特定客户端应用程序的读取速率。有了完全公开的阅读规则,互联网上的每个人都可以反复阅读文件来支付账单。不过,发生这种情况的可能性非常小,您应该向 Firebase support 报告看似滥用的行为。

    您可以通过调用您希望客户端能够阅读的单个顶级集合来消除警告消息。由于 Firebase 不知道您可能希望允许或禁止访问哪些集合,因此您应该明确说明。例如,每个集合都是这样的:

        match /collection1/{document=**} {
           allow read;
        }
        match /collection2/{document=**} {
           allow read;
        }
    

    如果您这样做,请务必删除您现在拥有的允许访问所有文档的规则。

    【讨论】:

      【解决方案2】:

      如果它只是只读操作,那么你可以考虑使用remote config,因为远程配置是完全免费的。 但如果您的场景需要使用 firestore 数据库,请考虑使用 Firebase 匿名登录并设置以下安全规则

      rules_version = '2';
      service cloud.firestore {
        match /databases/{database}/documents {
          match /collection_name/{documentId} {
            allow read: if request.auth.uid != null;
            allow write: if false;
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-01-06
        • 2018-09-16
        • 2021-07-02
        • 2020-11-05
        • 1970-01-01
        • 2021-06-23
        • 2020-04-28
        • 2018-07-15
        • 2018-04-17
        相关资源
        最近更新 更多