首页 > 解决方案 > 为什么 Google Firebase Cloud Firestore 有“写入”、“更新”安全规则,而我们不应该允许用户直接在数据库上写入?

问题描述

我正在实现一个使用 Google Firebase Cloud Firestore 的应用程序。因为我的应用程序有很多小的写入请求,如果我在中间使用 Firebase Cloud Functions 会非常昂贵。因此,我问了一个关于我们是否应该允许用户直接写入数据库的问题。所有的回应都说我不应该这样做。那么,为什么 Google Firebase Cloud Firestore 有“写入”、“更新”安全规则呢?无论如何,用户都不应该写入数据库。

编辑(回应 DIGI 的评论和答案):从答案看来,我们似乎可以使用 firebase 规则。那么,我们应该如何正确使用它们呢?

例如,当用户打开地图并将其更新到数据库时,我的应用程序正在记录用户的位置,以便用户的朋友可以实时看到它。我应该如何确保数据的格式为{longtitude: double, latitude: double, timeStamp: TimeStamp},并且用户不会更改文档中的其他任何几项?

标签: firebasefirebase-realtime-databasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


这是标准 MySQL 数据库的常见误解,在服务器充当逻辑层并位于客户端和数据库之间的类似情况下。

Firebase 仍然在简化版本中拥有这一层逻辑,称为安全规则,它允许来自客户端的基本读写操作。该设计是将计算能力从服务器后端转移到客户端,通过将需求分配给用户的设备来节省后端的服务器计算成本。

SE 中列出的担忧来自那些不知道您可以在规则和项目中设置的限制和限制,以控制 Firebase 和您的应用程序可以请求的内容。

澄清一下,Firebase 不会隐藏您的数据库密钥,它们很容易访问,是的,理论上用户可以使用您的数据库后端创建客户端。但只要规则到位、条件定义、Cors 配置和应用源设置得到执行,您就可以阻止所有这些。


推荐阅读