限制对应用程序UI外部对Firestore DB的写访问权限

时间:2020-10-10 11:04:24

标签: javascript firebase google-cloud-firestore

我正在尝试构建一个像经典视频游戏一样工作的应用程序,但用户必须完成一些挑战才能前进。根据用户解决难题的方式,他/她将获得XP积分,徽章等。用户可以退出该应用程序,然后再通过身份验证系统返回。

我打算使用Firebase Auth进行身份验证,并使用Firestore进行数据库。这是我第一次在(某种)生产环境中使用Firebase服务,但是最近我一直在尝试使用它们的服务。

Firestore将用于为每个用户存储一组数据,但主要是他/她的得分。我有点熟悉Firestore中的安全规则,并且知道如何确保只有经过身份验证的用户才能写入db,在授予写入权限之前执行数据验证等。

但是,有一个我无法解决的问题:如何确定(已认证的)用户将不使用浏览器控制台或自定义的API调用来更新其点并将其写入数据库?就像本视频的第一部分一样:https://www.youtube.com/watch?v=b7PUm7LmAOw&t

总结:我的预期结果是(通过身份验证的)用户只能通过使用UI(即解决挑战)而不是直接调用数据库来更新我在Firestore数据库上的分数。我想到了其他一些解决方案(例如,仅向数据库发送用户响应(如测验答案),然后使用Cloud Functions更新分数),但是在我看来,我使一个简单的问题过于复杂

我已经阅读并阅读了很多有关Firestore安全性的指南:他们在解释如何保护未经身份验证的黑客保护应用程序方面做得很好,但是我还没有找到有关如何保护应用程序的指南防止来自经过身份验证的用户的有害行为。

在此先感谢您提供任何指导,深表感谢。保持安全:)

更新:当您无法“信任”通过身份验证的用户正在使用Cloud Functions时,这似乎是管理流向数据库的数据流的唯一方法。谢谢!

1 个答案:

答案 0 :(得分:0)

  • 使用Firestore实时收听得分,积分和徽章。您可以将这些安全规则设置为对经过身份验证的用户为“只读”,为服务用户(将在您的云功能中使用)设置写权限。
  • 使用云功能发送测验答案,将使用您的经过服务验证的用户(具有对集合的写权限)进行处理。

因此,您的云功能可能负责检查答案并防止控制台和其他方法滥用用户。