首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云FireStore安全规则

云FireStore安全规则
EN

Stack Overflow用户
提问于 2020-07-27 17:09:49
回答 1查看 61关注 0票数 0

我有一个使用来自Firebase的云FireStore的应用程序。

它主要是一个网站,数据存储在Firestore上。我所说的数据,是指网站上显示的文本和图像,供每个用户查看。

所以我每天都会收到一封来自Firebase的邮件,告诉我我的规则是不安全的,因为每个用户都可以阅读每个数据(这是主要的目标,如果不是这样,他们就不会在网站上看到任何文本)。

我之所以这样做,是因为我将Firebase身份验证用于网站的某种管理模式,在这种模式下,您可以编写和更新新数据。

目前,我的规则如下:

代码语言:javascript
复制
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的初学者,我非常感谢任何人的帮助。

干杯

EN

回答 1

Stack Overflow用户

发布于 2020-07-27 23:10:41

所以我每天都会收到一封来自Firebase的邮件,告诉我我的规则是不安全的,因为每个用户都可以读取每个数据(这是主要的目标,如果不是这样的话,他们就不会在网站上看到任何文本)。

我不会像Renaud建议的那样忽略这封电子邮件。允许使用递归通配符访问数据库中的每个文档,例如:match /{document=**}可能会导致意想不到的安全问题。

相反,你的规则应该明确说明哪些集合实际上是公开的,任何人都可以查询。只需删除与所有文档匹配的递归通配符,并单独调用每个集合,电子邮件就会停止:

代码语言:javascript
复制
    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);
        }
    }

虽然您可能会发现这并不方便,但它可以防止您在将来意外地允许对其他不应该公开的数据进行读访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63112107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档