首页 > 解决方案 > 可以在客户端实现firestore读取而不用担心吗?

问题描述

我正在使用 Firebase 在 React Native 中开发一个应用程序,其中对 firestore 的每一次写入都在后端处理,但读取不是。我在客户端实现读取,我担心用户会修改我的代码并开始读取数百万个文档,从而产生大笔费用。

是否也应该在后端实现 Firestore 读取?

Pd:现在,我的安全规则只允许读取登录用户。

我真的很感激任何反馈。

谢谢你。

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


可以在客户端读取甚至写入 Firestore,但您的应用程序应该为此做好准备。

保护 Firestore 应用程序的最佳方法是使用Firebase 身份验证安全规则

我建议你看一下这个文档,虽然它看起来有点广泛,但可以在下一段中恢复:

使用您的安全规则确保您只检索用户应该有权访问的文档。

它可能看起来有点微不足道,但它是如何避免恶意用户意外读取的基础。例如,您可以使用安全规则将读取限制为仅“作者”字段与身份验证 ID 匹配的经过身份验证的用户:

service cloud.firestore {
  match /databases/{database}/documents {
    match /stories/{storyid} {
      // Only the authenticated user who authored the document can read or write
      allow read: if request.auth != null && request.auth.uid == resource.data.author;
    }
  }
}

这样,即使他在客户端更改了您的代码,用户也无法检索数千个文档,因为他只能访问有限数量的资源。

本文还有许多其他有用的示例,它们将帮助您了解如何保护您的数据。

此处提到的每个规则集评估的文档访问调用也有限制:

超过任一限制都会导致权限被拒绝错误。

因此,您可以确定,即使恶意用户想要多次调用同一个文档,它也会在达到所述限制后被 Firestore 阻止,或者将结束使用缓存而不是直接调用您的数据库。

我想提到的另一件事是,它可能会收到警报或限制您的帐单预算,因此您不必担心意外费用,这个答案更好地解释了它:

(在 Google Cloud Platform 控制台上)您可以为您的 Firebase 项目设置计费提醒,以便在使用量达到一定水平时收到提醒。虽然您无法将其配置为在某些时候关闭项目,但警报通常应该非常适合提醒您异常使用模式

GCP 文档现在还有一个关于限制(禁用)计费以停止使用的部分。


推荐阅读