【问题标题】:Why should we use Firebase security rules?为什么要使用 Firebase 安全规则?
【发布时间】:2021-06-06 11:12:14
【问题描述】:

就开发的流畅性而言,Firebase 无疑是最好的后端系统(至少在我看来)。但据我在几篇文章中看到的,如果安全规则编写不当,存储的数据可能会暴露出来。但是 Firebase 项目与我们的应用程序直接相关(使用包名和 SHA1 指纹,虽然是可选的) 现在问题来了,如果我的 Firebase 项目与我的应用程序绑定,我为什么还要关心安全规则?如何从其他地方访问我的项目?

【问题讨论】:

  • 这是一个非常广泛的问题,但例如,不允许一个用户访问另一个用户的数据。这些将是 Firestore 中的用户级安全规则。例如-match /users/{userid} { allow read, write: if request.auth.uid == userid; }

标签: firebase firebase-security


【解决方案1】:

Firebase 项目在其存在的最长时间内实际上与您的特定应用绑定,或者至少不与它支持安全规则的服务(Firestore、实时数据库和云存储)绑定.因此,任何拥有配置数据的人都可以使用 API 调用您的项目,而安全规则是保护数据免受恶意用户侵害的唯一方法。

在 2021 年 I/O 大会上,Firebase 推出了App Check,首次为实时数据库、云函数和云存储这三个产品添加了应用级检查。 App Check 与每个受支持平台(例如 Android 上的 SafetyNet)的证明提供商合作,仅接受来自您的应用的请求,并拒绝其他应用。

虽然这提供了广泛的保护,但恶意用户仍有可能破坏该机制。因此,我仍将在 我的 Firebase 项目中实施安全规则,从而将 App Check 提供的广泛保护与安全规则中的细粒度访问控制相结合。

【讨论】:

  • 感谢 Puf 的澄清。但是,如果 Firebase 项目与我们的应用绑定,那么使用 包名 甚至有时甚至是 SHA1 指纹 进行注册有什么意义?此外,任何拥有配置数据的人都可以违反安全规则吗?例如,如果我们使用 ".write": "$uid == auth.uid",任何拥有所有配置数据的人都可以写入数据库(不是我的应用程序的用户) ?
  • ".write": "$uid == auth.uid" 要求auth.uid 与该上下文的$uid 匹配,并且auth.uid 不能被欺骗。但是没有什么可以阻止任何用户在您的应用之外创建帐户,因此他们可以根据需要调用 API,而不仅仅是使用您应用中的代码路径。
  • “但没有什么可以阻止任何用户在您的应用之外创建帐户,因此他们可以随意调用 API”。 - 创建帐户是否意味着以用户身份进行身份验证?
  • 但我还有一个疑问。如果用户使用 Google 帐户登录,具有相同 Google 帐户的用户可以在我的应用程序之外读取或写入数据吗?如果这个问题很愚蠢,我很抱歉。
  • 抱歉,这里的问题太多了,我无法在评论中有效地回答。我会尽量回答我能回答的问题,但建议您搜索我在此处未涵盖的任何内容,因为其中许多问题之前已得到回答,并为其他人发布具体、具体的后续问题。 2) 任何人都可以调用 Auth API 登录 - 无论他们是否使用您的应用程序代码。 5)正确,当您在App Check中启用强制执行时,仅允许来自您的应用程序的调用访问数据库和存储中的资源。来自其他代码的调用被拒绝。
猜你喜欢
  • 2018-12-18
  • 2022-01-16
  • 2016-06-27
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2016-08-19
  • 2020-09-06
相关资源
最近更新 更多