Firebase Cloud Firestore 安全规则只允许读写

时间:2021-06-10 09:21:04

标签: firebase google-cloud-firestore firebase-security

我为贫困学生制作了一个简单的应用程序,以便他们可以在大流行期间学习。我每天通过 Firebase 控制台(云 Firestore)更新每个主题的笔记。不包括身份验证,因为学生很小,并且不精通技术。 我只允许读取和删除安全规则中的写入选项。昨晚我收到了这封电子邮件。我已经添加了图像副本。我只是想让每个人都下载应用程序并阅读数据(注释)但没有人写。我的数据库安全吗?如果获得了项目 ID,任何人都可以编写、删除或操作数据库吗?

很快我打算购买 blaze 计划,但现在我有点不安全。

我的安全规则如下:

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

enter image description here 电子邮件

3 个答案:

答案 0 :(得分:0)

是的,它是安全的,人们只能阅读东西 除非可以直接访问数据库,否则没有人可以写入它

答案 1 :(得分:0)

这是完全安全的,没有人可以写入或删除您的数据库,但是由于数据库对所有人开放,因此如果您使用免费计划或你使用计费,你的计费成本会飞涨。 所以最好是仅对经过身份验证的用户授予读取权限,并且在应用程序端,您可以进行匿名登录,这样您就不必在应用程序端强制执行 gmail 或其他登录,并且未经身份验证的用户不能耗尽您的每日限制, 检查以下链接以进行匿名登录 https://firebase.google.com/docs/auth/android/anonymous-auth

答案 2 :(得分:0)

正如该电子邮件/警告消息中所述,您拥有的规则不被视为安全。根据您目前的规则,恶意用户可能会通过调用数百个请求来滥用您的数据库,这可能会导致意外的账单费用。

此警告的触发条件很简单 - 如果 or "allow write; 路径上存在“allow read;/{document=**}”,则向用户发送警告,因为这些宽泛的规则被视为错误,应该收紧。存在警告的主要原因之一是,如果您将电话号码、电子邮件地址、帐单信息等敏感用户数据存储在 /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;
    }
  }
}

我建议您阅读 fixing insecure rules 文档以了解更多信息。

您还可以使用 granular rules 将可以对您的数据库(例如 limiting getting a list of posts)执行的查询限制为一次 10 个。