【问题标题】:How to secure Firebase by checking for correct userID in the "official" Authentication database如何通过在“官方”身份验证数据库中检查正确的用户 ID 来保护 Firebase
【发布时间】:2021-06-25 13:20:53
【问题描述】:

我有用户,注册了 Firebase 身份验证的电子邮件功能。 只有经过身份验证的用户才能写入我的 Firestore 数据库。

我的规则(来自文档):

allow write: if request.auth != null;

允许访问存在非空身份验证对象的每个请求。这似乎不是很安全。因为您可以使用任何 auth = {something: "hacker"} 对象发出请求。

所以,为了避免这个问题。如何检查给定的request.auth.uid 是否真的来自 Firebase 身份验证服务?

【问题讨论】:

标签: google-cloud-firestore firebase-authentication firebase-security


【解决方案1】:

request.auth 变量由 Firebase 在服务器上自动填充,基于随每个请求从客户端发送的 ID 令牌。为给定的 Firebase 项目创建 ID 令牌需要您有权访问该项目的管理凭据。

这意味着,只要您确保不公开共享项目的管理凭据,任何人都无法将自己的信息注入 ID 令牌,而您数据库中的 request.auth 对象实际上是安全的防止篡改。


您问题中的规则限制了谁可以写入数据,因为用户需要登录 Firebase 身份验证才能写入。您通常还希望通过控制访问权限(例如,只允许他们access their own data)和他们写的validating the data 来限制用户可以执行的什么。

【讨论】:

  • 对我来说很有意义。我有点担心,因为在 Firebase 规则游乐场中,您可以编辑您的自定义请求。每次我提供一个空的身份验证对象时,Firebase 仍然授予访问权限。
  • 规则游乐场在 Firebase 控制台中运行,并且只能由项目的协作者访问。因此,它是可以访问项目管理凭据的环境示例。
【解决方案2】:

这些规则对我有用。

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

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 2017-10-15
    • 2022-10-24
    • 2023-03-04
    • 2017-05-12
    • 1970-01-01
    • 2023-04-07
    • 2015-10-17
    相关资源
    最近更新 更多