【问题标题】:Changing the Firebase Cloud rules [closed]更改 Firebase 云规则 [关闭]
【发布时间】:2020-08-13 09:42:21
【问题描述】:

我的 Firebase Cloud 数据库中有以下规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

我不断收到电子邮件说:

我们检测到您的安全规则存在以下问题:

  • 任何用户都可以读取您的整个数据库
  • 任何用户都可以写入您的整个数据库

在我们的主屏幕中,用户只能通过使用电子邮件+密码或通过短信获得的电话号码+代码签名来进入应用程序。两者都适用于 Firebase 身份验证服务。在这种情况下应该有什么规则?

【问题讨论】:

  • 为了编写有效的规则,它们必须与规则应该允许或拒绝的特定查询配对。如果不查看查询,就无法编写实现所需安全性的规则。请编辑问题以更清楚地了解您正在使用的查询。我建议还从文档开始了解规则的工作原理:firebase.google.com/docs/firestore/security/get-started

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


【解决方案1】:

如果您只想允许经过身份验证的用户访问,您将修改您的规则如下:

// Allow read/write access on all documents to any user signed in to the application
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

话虽如此,请注意以下两点:

  • 通过执行/{document=**}(即使用recursive wildcard),您可以将这些规则应用于Firestore 数据库的所有集合/文档。最好为每个集合显式定义规则,以便以更细粒度的方式控制对每个集合的访问。这样,您就可以避免将来创建新的非公共集合但忘记调整安全规则的任何错误。
  • 不要忘记,任何拥有您的 Firebase 项目的 Web API 密钥(在您应用的源代码中不难找到)的人都可以为您的 Firebase 项目创建一个帐户,例如,只需调用Firebase Auth REST API。换句话说,此规则只允许经过身份验证的用户访问您的数据库,但默认情况下,任何人都可以成为经过身份验证的用户。

【讨论】:

  • 在注册活动中,它包含一个选项“组”,用户应选择现有组。组名存储在数据库/groups/<group-name> 中。我想用这些规则它不会起作用吗?因为它无法获取此信息。很抱歉之前没有提及。
  • 哦,确实这完全改变了情况!您需要提供更多详细信息,说明您希望如何使用此组集合。是否要检查用户是否属于某个组?
  • 对不起!不,只是为了获取所有组,每个用户都可以尝试“注册”到该组,但只有当他拥有该组的权限(由其他成员添加)时它才会起作用。
  • 看来这应该是一个全新的问题。请写一个新问题,详细说明您的确切目标。如果您认为我当前的答案回答了您的原始问题(即如何解决您收到有关您的规则的警报电子邮件这一事实),您可以接受和/或投票赞成它
猜你喜欢
  • 2020-11-03
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多