添加firebase firestore的数据读取限制

添加firebase firestore的数据读取限制,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我们有一个使用Firestore的iOS应用程序。该应用程序只读取数据(不写入),我们没有用户帐户,数据库中的任何内容都不需要保护。出于这个原因,我们使用了这些幼稚的安全规则 service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read; } } } 然而,Firebase已经警告我们(当然,有充分的理由)这会使我们处于

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
       allow read;
    }
  }
}
然而,Firebase已经警告我们(当然,有充分的理由)这会使我们处于风险之中,原因有两个:

  • 任何用户都可以从数据库中读取任何内容,因此没有任何内容是安全的 我不认为这是个问题,因为我们没有什么必须保密的。当然,至少就目前而言,这可能会改变

  • 允许无限制阅读
  • 这就是问题所在的谎言。我想一个恶意用户可以读取我们的数据库数百万次,从而关闭我们,或者干脆迫使我们支付一大笔账单(我们使用Blaze计划,即现收现付)

    我们怎样才能保护我们不受这种伤害?我在这里看到过类似的问题,但它们没有提供任何有用的建议

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

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


    一旦您允许对文档进行读取访问,就没有办法限制特定客户端应用程序的读取速率。有了完全公开的阅读规则,互联网上的每个人都可以反复阅读文件来增加账单。然而,发生这种情况的可能性非常小,你应该向他们报告那些看似虐待的行为

    您可以通过调用希望客户端能够阅读的单个顶级集合来消除警告消息。因为Firebase不知道您可能希望允许或不允许访问哪些集合,所以您应该明确。例如,对于每个集合,类似以下内容:

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

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

    一旦您允许对文档进行读取访问,就没有办法限制特定客户端应用的读取速率。有了完全公开的阅读规则,互联网上的每个人都可以反复阅读文件来增加账单。然而,发生这种情况的可能性非常小,你应该向他们报告那些看似虐待的行为

    您可以通过调用希望客户端能够阅读的单个顶级集合来消除警告消息。因为Firebase不知道您可能希望允许或不允许访问哪些集合,所以您应该明确。例如,对于每个集合,类似以下内容:

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

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

    < P>如果只是只读操作,则可以考虑使用,因为远程配置完全免费。 但是,如果有必要为您的场景使用FielSt店数据库,那么考虑FielBaseAdvor登录并设置以下安全规则

    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;
        }
      }
    }
    

    <>如果只是只读操作,那么可以考虑使用,因为远程配置完全免费。 但是,如果有必要为您的场景使用FielSt店数据库,那么考虑FielBaseAdvor登录并设置以下安全规则

    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;
        }
      }
    }