【问题标题】:exposing firebase credentials with user information使用用户信息公开 Firebase 凭据
【发布时间】:2022-10-13 21:38:05
【问题描述】:

嘿,我正在使用 firebase 为公共项目开发 Web 应用程序,我担心会暴露用户电子邮件。

该网站的基本思想是:

1.) 输入 -> 用户提供电子邮件和一些信息
2.)计算发生在服务器上,信息被写入firestore(admin sdk)
3.) 输出 -> 用户在他们的电子邮件中收到一个链接以查看结果

我存储的信息本质上是

taskID {
    input,
    email,
    output
}

用户只有读取权限

我的firebase规则如下:

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

我知道firebase凭据在客户端上有些暴露,所以我担心有人可以使用它们列出所有任务,然后遍历所有任务以获取电子邮件和用户提供的输入。 这可能吗?我是否必须拥有一个只能由管理员阅读的不同集合,然后引用这些字段?

taskID {
    input,
    email : privateCollectionID,
    output
}

privateCollectionID {
    email
}

谢谢

【问题讨论】:

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


    【解决方案1】:

    您当前的规则允许任何人和每个人随意读取数据库中的所有数据。

    如果这不是您想要的,您需要以符合您的要求的方式构建数据想。

    如果您希望某些数据可以公开读取,而其他数据只能由该数据的所有者读取,则需要将该数据分成不同的文档/集合,并对它们应用不同的规则。

    例如,请查看安全规则中public/private access 的 Firebase 文档。

    【讨论】:

      【解决方案2】:

      您可以使用从前端调用的Callable Cloud Function,并传递所需的电子邮件。

      CF 查询集合,找到该邮件对应的文档,并返回文档数据。

      由于 Admin SDK 绕过安全规则,您可以在安全规则中拒绝对该集合的读取访问权限。


      注意:

      • 这不会阻止用户测试某个电子邮件是否存在,但会阻止他们直接(一次性)访问整个电子邮件列表。
      • 与通过 JS SDK 直接查询 Firestore 相比,响应时间会更长。此article 中的更多详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        相关资源
        最近更新 更多