【问题标题】:How strict Firestore Rules have to be?Firestore 规则必须有多严格?
【发布时间】:2018-05-05 09:18:41
【问题描述】:

我可以信任 Firestore 中传入的数据,还是我必须检查所有内容并且绝对不信任传入的数据,因为客户端可以伪造所有内容?

例如,客户端可以伪造 uid、电子邮件和显示名称吗?

firebase.firestore().collection("users").doc(state.user.uid).collection("friendRequests").doc(payload.uid).set({
  uid: payload.uid,
  email: payload.email,
  displayName: payload.displayName
});

Firestore 规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
    }
    match /users/{userId} {
        allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
    match /users/{userId}/friendRequests/{friendId} {
      allow create: if userId == request.auth.uid
      && friendId != request.auth.uid
      && !exists(/databases/$(database)/documents/users/$(request.auth.uid)/friends/$(friendId))
      && !exists(/databases/$(database)/documents/users/$(request.auth.uid)/friendRequests/$(friendId))
      && !exists(/databases/$(database)/documents/users/$(friendId)/friends/$(request.auth.uid))
      && !exists(/databases/$(database)/documents/users/$(friendId)/friendRequests/$(request.auth.uid));
    }
  }
}

规则集已经很大了,我什至都没有检查数据结构是否有效以及朋友 uid 是否存在。

【问题讨论】:

    标签: google-cloud-firestore firebase-security


    【解决方案1】:

    您的安全规则中的 request.auth 由 Firebase 身份验证填充。这意味着触发规则的用户必须使用 Firebase 身份验证登录,并且request.auth 中的配置文件属于登录用户。

    如果有人可以访问您的项目的管理凭据,那么他们可以劫持该流程的唯一方法。有了它,他们可以生成他们想要的任何令牌。但是如果发生这种情况,他们已经可以不受限制地访问您的数据库,因此伪造令牌的额外步骤是没有用的。

    当然,在使用社交服务提供商(Facebook、Github、Google 等)时,用户可以设置他们想要的任何显示名称。因此,除了使用它为每个用户显示名称之外,您通常不应该依赖它是否有效。

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2015-10-15
      • 2019-04-18
      • 2021-08-08
      • 2016-07-14
      • 2013-03-11
      • 2020-11-27
      • 2023-01-05
      • 2018-12-14
      相关资源
      最近更新 更多