【问题标题】:How to secure Firestore database如何保护 Firestore 数据库
【发布时间】:2021-09-09 08:45:53
【问题描述】:

我有一个 CRUD 应用程序(没有登录/注册应用程序),数据存储在 firestore 数据库中,它只是一个连接 firestore db 的 Angular 应用程序。我的 firestore 安全规则是 allow read, write true,这样我就可以访问我的 firestore db。

这是实际firebase配置的格式

  {
    apiKey: "xxxx",
    authDomain: "xxxx-fi.firebaseapp.com",
    databaseURL: "https://xxx-fi.firebaseio.com",
    projectId: "xx-fi",
    storageBucket: "xx-fi.appspot.com",
    messagingSenderId: "xxx",
    appId: "1:xxx:web:36344b5bddd03c3bcef663"
}

我发现firebase足以知道projectId而不是发送完整的上述配置。

{
  projectId: "xxxx-fi"
}

只需使用上面的projectId,我就可以在我的firestore db中读写。我觉得这是安全风险,如果有人知道我的 projectId,对他们来说,在我的数据库中很容易读/写。

那么,为了将我的应用程序转移到生产级别,如何保护我的 Firestore 数据库?

注意:我已经看到有人在 stackoverflow 中发布了相同类型的问题。但无法清楚地理解它。请清楚地分享您的解决方案。 TIA

【问题讨论】:

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


    【解决方案1】:

    需要项目 ID,以便 Firebase SDK 知道从哪里读取/写入数据。是的,任何拥有该项目 ID 的人都可以与您的 Firebase 项目通信,这就是 Firebase Security Rules 的用武之地。

    allow read, write: if true 将允许任何人读取和写入您的数据库。

    allow read: if true;
    allow write: if false;
    

    这些规则将允许任何人读取但不允许任何人写入数据库。现在,如果您想写入数据库,则必须直接从 Firebase 控制台执行此操作。

    其他选项是使用 Firebase 身份验证并仅为您自己创建和帐户。那么就可以写出如下规则:

    allow write: if request.auth.uid === "yourFirebaseUID";
    

    这将只允许您的帐户写入数据库。

    如果你想允许多个用户写入你的数据库,那么你可以使用Firebase Custom Claims,这有点像 Discord 上的角色。然后,您可以像这样检查声明:

    allow write: if request.auth.token.writerClaim == true;
    

    您能指定您要查找的规则类型吗?我也许可以帮助您以这种方式编写规则或提出任何解决方法。

    【讨论】:

    • 谢谢!这里,apiKey、apiId等其他属性的作用是什么。等等。如果他们只需要 projectId,我真的不明白为什么 firebase 有这些属性
    • @RenceAbi API 密钥用于其他服务,例如 Firebase 身份验证、存储等,这些服务主要涉及 Google Cloud。使用 RTDB 需要数据库 URL,存储桶 URL 也是如此。要自己测试,您可以使用浏览器开发工具中的存储和身份验证以及结帐网络选项卡。您将在对 API 的请求中看到 API 密钥。如果答案有帮助,您可以接受并投票,否则请随时提出更多问题。
    • 您还可以查看this answer,我在其中发布了使用 Firebase API 密钥的示例 API 请求
    猜你喜欢
    • 2019-12-31
    • 2019-11-16
    • 2021-01-14
    • 1970-01-01
    • 2021-06-13
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多