有关Firebase规则的建议

有关Firebase规则的建议,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我已将我的Firestore规则稍微修改为以下代码(要求用户进行身份验证才能写入)。为了确保网站的安全,您建议制定哪些其他限制 service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read; allow write: if request.auth != null; } } } 对不起。我现在不能评论,所以我能

我已将我的Firestore规则稍微修改为以下代码(要求用户进行身份验证才能写入)。为了确保网站的安全,您建议制定哪些其他限制

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

对不起。我现在不能评论,所以我能做的就是写一个答案

我的经验如下

确保仅根据需要提供对数据的访问

因此,从没有任何访问权限开始,并在需要时显式添加访问权限。当您需要访问权限时,任何开发人员都会告诉您,或者您自己解决问题,然后您可以将其添加到该集合中。当您授予了过多的权限时,如果以相反的方式执行此操作,则所有内容都将被读取或由经过身份验证的用户读取,将永远无法识别

例如,如果一个集合由一个云函数使用,而没有其他功能,那么就不需要读访问

因此,显式地按集合添加权限,而不是按所有内容添加权限

如果未经身份验证的用户需要读访问,则添加读访问,但如果只有经过身份验证的用户需要读访问,则添加读访问

allow read:if request.auth != null;
如果文档只应由当前经过身份验证的用户访问,则应限制该用户,而不仅仅是所有经过身份验证的用户

allow read: if request.auth.uid == userId;
请参阅firestore规则帮助]

此外,规则还可以包括数据验证。这允许长度检查、值检查等,也允许基于操作的限制,而不仅仅是读和写。比如说

match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }

有一些关于这个主题的好视频,比如这个


如果不知道数据库中的所有内容、您希望用户如何与数据库交互以及隐私问题是什么,就真的不可能说出您应该做什么。从广义上讲,你的规则应该反映出你的应用程序满足用户需求所需的最小权限。
allow read: if resource.data.userType == 'reader';