angular - Cloud FireStore 安全规则
问题描述
我有一个使用 Firebase 的 Cloud FireStore 的应用程序。
它主要是一个网站,数据存储在 Firestore 上。我所说的数据是指网站上显示的文本和图像,供每个用户查看。
所以我每天都会收到一封来自 Firebase 的邮件,告诉我我的规则不安全,因为每个用户都可以读取所有数据(这主要是目标,如果不是,他们将不会在网站上看到任何文本)。
我这样做是因为我将 Firebase 身份验证用于网站的某种管理模式,您可以在其中编写和更新新数据。
目前,我的规则如下:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true;
allow write: if request.auth.uid != null;
}
match /users/{userId} {
allow write: if isOwner(userId);
}
}
function isOwner(userId) {
return request.auth.uid == userId;
}
}
作为 Firebase 的初学者,我将不胜感激。
干杯
解决方案
所以我每天都会收到一封来自 Firebase 的邮件,告诉我我的规则不安全,因为每个用户都可以读取所有数据(这主要是目标,如果不是,他们将不会在网站上看到任何文本)。
我不会像 Renaud 建议的那样忽略这封电子邮件。允许使用如下递归通配符访问数据库中的每个文档:match /{document=**}
可能会导致意外的安全问题。
相反,您的规则应该明确说明哪些集合实际上是可供任何人查询的。只需删除匹配所有文档的递归通配符,并单独调用每个集合,电子邮件就会停止:
match /databases/{database}/documents {
match /collection1/{id} {
allow read: if true;
allow write: if request.auth.uid != null;
}
match /collection2/{id} {
allow read: if true;
allow write: if request.auth.uid != null;
}
match /users/{userId} {
allow write: if isOwner(userId);
}
}
虽然您可能会觉得这很不方便,但它可以防止您将来意外允许对不应该公开的其他数据进行读取访问。
推荐阅读
- java - 在java中将英文字符转换为重音字符和符号
- c++ - 如何轻松检查操纵杆是否插入(通过 C++)
- r - 如何计算R中轮廓线下方的点数
- python - python bot 服务器不接收 bash 消息 - 缺少概念
- java - 如何从 Hooks(@Before) 获取 WebDriver Instance(Object) 以并行执行功能文件
- python - 如何将字典列表附加到python中的字典?
- c# - 视图中出现 InvalidOperationException.Collection 被修改错误
- qt - Qt 信号槽连接 - 只允许某种类型的信号连接
- excel - Excel - 刷新所有重复的数据透视表属性
- java - 无法在 android 中更新我的 Realm 数据库