Firebase Cloud Firestore安全规则只允许读取而不是写入。

3
我为弱势学生制作了一个简单的应用程序,这样他们就可以在疫情期间学习。我每天通过Firebase控制台(Cloud Firestore)更新每个科目的笔记。没有包括身份验证,因为学生年龄小,对技术不熟悉。在安全规则中,我只允许读取和删除写入选项。昨晚我收到了这封电子邮件。我已添加了图像副本。我只希望每个人都能下载应用程序并阅读数据(笔记),但没有人可以编写。我的数据库安全吗?如果有人获得项目ID,是否可以编写、删除或操纵数据库?
我计划很快购买Blaze计划,但现在我有点不安。
我的安全规则如下:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
    }
  }
}

这里输入图片描述 电子邮件


1
Firebase实时数据库和Cloud Firestore是两个独立的数据库。请只使用相关标签标记您的问题,不要同时使用两个标签。 - Frank van Puffelen
3个回答

1

如邮件/警告消息中所述,您的规则不被认为是安全的。按照您当前的规则,恶意用户可以通过调用数百个请求来滥用您的数据库,这可能导致意外的计费。

此警告的触发条件很简单 - 如果在/{document=**}路径上存在"allow read;"或"allow write;",则向用户发送警告,因为这些广泛的规则被认为是一个漏洞,应该加强限制。警告存在的主要原因之一是,如果您将敏感用户数据(如电话号码、电子邮件地址、结算信息)存储在/users/someUserId文档下 - 根据当前的规则,这些数据现在是公开可访问的,并且可能会违反数据隐私法和GDPR等法规,使您陷入麻烦。还有一些类似的条件也会发送类似的警告,例如如果系统检测到默认的30天读/写访问已过期。

如果您的数据预计是公开可访问的,而不是授予整个数据库读取权限,请将其授予您希望公开的特定集合。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // public database of cars
    match /cars/{carId} {
      allow read;
    }

    // public database of trains
    match /trains/{trainId} {
      allow read;
    }

    // only that user can read/write their own data
    match /users/{userId} {
      allow read: if request.auth != null && request.auth.uid == userId;
      allow write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

我建议阅读修复不安全规则文档以获取更多信息。
您还可以利用细粒度规则限制对数据库的查询,例如将获取帖子列表的限制限制为每次10个。

问候,我还没有存储任何用户数据。我只有一个最多有7个文档的集合。您能告诉我如何发送一百个请求吗?是通过机器人吗?我对此很新,并且希望为了以后的安全而更多地了解这方面的知识。昨晚我收到了相同的第二封邮件。如果我不采取行动,他们会终止我的帐户或数据库吗?现在一个解决方案是我可以选择匿名登录。 - Raj A
我所说的关于数百个请求的意思并不是仅有一个人在使用你的数据库(Firestore 和 RTDB 的重点是同时为数百和数千个用户提供服务),而是有些人本质上爬取你的数据库试图获取他们能够得到的数据。客户端 SDK 并不会使这变得容易,但是一个不良行为者可以测试最常见的集合名称(“users”、“posts”、“messages”、“events” 等),如果他们发现存在未受保护的集合,则可以下载其中的所有文档。 - samthecodingman
1
@RajA,如果您没有保护好数据库,将会每天收到警告通知。如果只有一个集合,可以像我上面使用 /cars/trains 一样显式地添加规则。我知道不活动的数据库会在6个月后暂停,但对于不安全的数据库采取何种行动我不确定。如果我是Firebase,你最多有30天的时间去修复它,否则我会把你从我的平台中删除,因为你没有遵循合理的责任义务。 - samthecodingman

0

是的,它是安全的,人们只能阅读内容,除非他们可以直接访问数据库,否则无法对其进行写入。


0

这是完全安全的,没有人可以写入或删除您的数据库。但是由于数据库对所有人都是开放的读取权限,因此一些臭名昭著的人可能会向您的数据库发送无休止的请求,如果您使用免费计划,则可能会超过每日限制,如果您使用付费计划,则会导致计费成本飙升。 因此,最好只为经过身份验证的用户授予读取权限,并在应用程序端进行匿名登录,这样您就不必强制要求通过Gmail或其他登录方式,在未经身份验证的情况下,用户无法超过您的每日限制。有关匿名登录,请参阅以下链接https://firebase.google.com/docs/auth/android/anonymous-auth


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接