我有一个使用来自Firebase的云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的初学者,我非常感谢任何人的帮助。
干杯
发布于 2020-07-27 23:10:41
所以我每天都会收到一封来自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);
}
}虽然您可能会发现这并不方便,但它可以防止您在将来意外地允许对其他不应该公开的数据进行读访问。
https://stackoverflow.com/questions/63112107
复制相似问题