firestore 和 firebase 存储的安全规则 - 避免外部注册

问题描述 投票:0回答:1

我正在开发一个 React Web 应用程序,它使用 Firestore 数据库来存储一些集合并使用 Firebase 存储图像。这是我第一次使用 Firebase。是时候投入生产了,我需要为项目配置安全规则。

我阅读了 Firebase 的文档,发现我想要允许应用程序用户进行的交互类型被认为不安全(根据 firebase docs

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

(以上是 Firestore 数据库的安全规则。存储也同样适用)

但是,这似乎正是我的应用程序中需要的行为。为什么?让我解释一下...

我使用 Firebase 身份验证中的电子邮件和密码身份验证。我希望所有登录的用户都能够读取和写入 Firestore 数据库和 Firebase 存储。不应该有不同的角色,也不应该限制对经过身份验证的用户拥有的文档的访问。限制对特定 uid 的读写也不是一个选项,因为所有登录用户都应该能够注册新用户(通过 createUserWithEmailAndPassword 方法)。

我阅读了更多内容,发现这是不安全的,因为有人可以在外部注册我的项目的 Firebase 身份验证。看来我可以通过限制可以使用我的 API 密钥的域来解决这个问题(如here中所述。这样用户只能从应用程序内注册。

这是否足以阻止任何人将其凭据添加到 Firebase 身份验证用户列表并登录我的应用程序?或者我应该采取进一步的安全措施?

谢谢你:)

firebase google-cloud-firestore firebase-authentication google-cloud-storage firebase-security
1个回答
0
投票

我多读了一点,发现[

allow read, write: if request.auth != null;
规则]不安全,因为 有人可以注册我项目的 Firebase 身份验证 外部。

是的,它是“不安全”的,因为一旦 (1) 有人拥有您的 Firebase 项目的 apiKey 并且 (2) 启用了电子邮件/密码登录方法,此人就可以使用 Firebase Auth REST API 并且注册您的项目(即创建一个新帐户)。

如果您部署链接到 Firebase 项目(Android、iOS、Web...)的应用程序,获取 apiKey 并不是很困难。

仅向一组用户(例如,公司的员工或应用程序的某些付费订阅者)授予访问权限的一种常见方法是使用自定义声明。您将在文档中找到使用声明设置访问控制的指南。

© www.soinside.com 2019 - 2024. All rights reserved.