当前位置: 首页 > 知识库问答 >
问题:

Firebase,不安全规则

葛高澹
2023-03-14

我最近收到一封来自Firebase的电子邮件,告诉我我的数据库(FiRest)的规则不安全,所以我将它们更改为以下内容:

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

在我有这些规则之前:

allow read, write: if true;

在做出改变后,电子邮件不断地回来,我不知道还能做什么。我已经尝试了以下链接中给出的几个选项,但它们都不能满足我的需要。

https://firebase.google.com/docs/rules/insecure-rules#firestore

我需要授权用户能够阅读和创建内容。所以使用我上面的规则。

我在他们发给我的电子邮件中看到,它说人们可以修改我的数据库,这是指从应用程序,还是意味着他们可以攻击我或其他什么?

因为我的应用程序的目的是用户可以创建内容。

但我不想有人侵入我的数据库并删除所有内容,这可能吗?

谢谢

共有2个答案

祝俊
2023-03-14

留档中提到了这种情况。任何经过身份验证的用户都可以写入您的数据库,这也包括删除数据。您正在使用递归通配符,使他们能够访问完整的数据库。

取而代之的是,尝试允许用户只编写自己的文档或类似的规则。

rules_version = '2';
service cloud.firestore {
  match / databases / {database} / documents {
    match /collectionName/{docId} {
     allow read: if true;
    allow write: if request.auth != null && request.auth.uid == docId;
    }
  }
}

上面的示例将允许用户编辑文档ID仅等于其UID的文档。

如果希望允许选定的用户写入(例如admin),则可以添加一个名为admin的字段,并在用户集合中的用户文档中将其设置为true。然后可以读取文档数据,如图所示:

match /collection/{document} {
      allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
      allow read: true;
    }
庄经国
2023-03-14

电子邮件是因为规则并不严格。你可能应该使用以下规则:

  1. 允许未经身份验证的用户读取数据
service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow create: if request.auth.uid == request.resource.data.author_uid;
      allow update, delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}

阅读这篇文章以获得更好的理解。您还可以在这里检查fi恢复何时将规则标记为不安全。更重要的是,这是要强调的一点。

请记住,Firebase允许客户端直接访问您的数据,而Firebase安全规则是阻止恶意用户访问的唯一保障措施。将规则与产品逻辑分开定义有许多优势:客户端不负责实施安全性,错误的实施不会危及您的数据,最重要的是,您不需要依赖中间服务器来保护数据免受外界的攻击。

示例规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userDoc} {
      allow read: if true
      allow create: if request.auth.uid == request.resource.data.id;
      allow update, delete: if request.auth.uid == resource.data.id;
    }

    match /posts/{postDoc} {
      allow read: if true
      allow create: if request.auth.uid != null;
      allow update, delete: if request.auth.uid == resource.data.user_id;
    }

    match /comments/{commentDoc} {
      allow read: if true
      allow create: if request.auth.uid != null;
      allow update, delete: if request.auth.uid == resource.data.user_id;
    }
  }
}
 类似资料:
  • 简单介绍一下,我正在尝试了解Firebase安全协议,我已经建立了一个名为UsersDB的数据库,该数据库将根据身份验证存储详细信息。uid。详细信息包括全名、电子邮件、提供商、帐户创建日期、上次登录日期。 我设置了如下规则: 我的理解是,记录只能由user_id符合auth.uid.的人读写 我的问题是我做得对吗?如果不对,我应该如何实现这一目标?我只希望创建帐户的人能够读写这个,而没有其他ui

  • 我试图为我的云还原设置安全规则,但我对规则应该应用于哪个数据库感到困惑。 我目前使用的唯一功能是记录Firebase事件。安全规则是否适用于Firebase事件?如果是,应该为哪个数据库编写规则?如果没有,我是否可以拒绝对所有事件的读/写访问,并且事件仍将被记录并发送到BigQuery?

  • 我正在尝试设置Firebase规则,如果$uid等于auth,则该规则将授予对R/W的访问权限。uid。我用firebase phone auth登录。 我正在尝试这条规则: 这条规则: 我尝试访问数据时出错(权限被拒绝)。 我遵循Firebase的说明,此规则通过模拟器。 当这些规则到位时,我不会从Firebase获得带有快照的实例。 如果你能帮助解决这个问题,我将不胜感激。 我正在尝试授予读取

  • 拒绝许可。无法访问存储桶..请访问Firebase控制台中的Storage选项卡,为您的存储桶启用Firebase存储,并确保您有足够的权限来正确提供资源 在谷歌搜索如何设置这些安全规则,我不确定什么是正确的答案。一些答案建议我在代码中编写方法来授予权限,但文档建议我需要在Firebase的端进行。 这是其中一个例子 我无法理解人们的回答 就像几个月前的这张 有人能解释一下当前的Firebase(

  • 我在中收到一条消息,告诉我我的项目有不安全的规则。但当我检查它时,我不太明白什么是不安全的。 它显示如下: 我保留了读取访问权限,因为它支持一个网站。所以任何访问该网站的人都应该能够读取数据。 至于写权限,据我所知,我是唯一能写的人。 请注意,我还有第三个系列(CollectionThree),规则中没有提到。这可能是原因吗? 除此之外,我还可以想象,只有web服务器可以获得读取权限,以便将内容提