【问题标题】:Security of Firestore Database - SwiftUIFirestore 数据库的安全性 - SwiftUI
【发布时间】:2020-08-17 02:27:10
【问题描述】:

我有一个非常简单的 Firestore 数据库用于我创建的游戏。我有一个包含文档的用户集合,每个文档都指定了用户的用户名、他们的电子邮件和他们的高分。

我希望每个人都能够阅读数据库中每个人的高分和用户名,因为我有一个列出每个用户的高分和用户名的列表。

但是,我只希望个人能够编写数据库(即提交自己的高分),前提是他们已登录。

因此,我有以下安全规则:

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

我的问题是,这安全吗?我想这意味着从技术上讲,有恶意的用户可以阅读每个用户的电子邮件。有没有办法通过某种方式指定只有​​每个人都应该能够读取每个用户文档的高分和用户名属性来防止这种情况发生?

此外,此设置确实可以防止恶意用户写入数据库,正确(在此处编辑:我猜这不是 - 我现在正在通过阅读此处的文档https://firebase.google.com/docs/firestore/security/rules-structure 来调查此问题)

我对 Firebase 并不陌生,但我对它的安全规则并不陌生,因为我之前没有将应用程序推送到生产环境,并且希望确保我不会留下任何易受攻击的东西,所以这里有任何反馈/指导感激不尽。

【问题讨论】:

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


    【解决方案1】:

    正如我在 your previous question 中解释的那样,任何人都可以从您的应用中获取配置数据,并使用该数据调用 Firebase API。

    这样安全吗?

    只有您可以确定您的规则是否适合您的用例。

    这些规则允许任何人阅读/Users 集合中的所有文档。此外,它们允许任何经过身份验证的用户读取和写入所有文档。如果这是您想要支持的用例,那么这些就是适合您的正确规则。

    因此,如果您在 Firebase 身份验证中启用了匿名身份验证提供程序,任何人都可以获取您的配置数据,编写一个最小的网页并调用 firebase.auth().signInAnonymously(),然后使用 firebase.firestore().collection("Users").get() 读取所有用户数据。

    在这种问答风格中,很难学习如何保护您的数据库。我反而推荐你:

    1. 阅读 security rules 上的 Firebase 指南。
    2. Doug 的视频introduction to security rules
    3. 观看剧集Getting to know Cloud Firestore,并特别关注security rules上的剧集。
    4. 视频Unit testing security rules with the Firebase Emulator Suite 及其后续Intermediate topics in Firebase Security Rules
    5. 亲系列剧集How to build a secure app in Firebase
    6. 文章Patterns for security with Firebase: combine rules with Cloud Functions for more flexibility

    【讨论】:

    • 是的,再次感谢您的回答,这非常有用,我目前正在查看文档以找到适合我的设置的正确配置。非常感谢您抽出宝贵时间在这里回答,祝您好运!
    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2021-07-12
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多