【问题标题】:How to block Google Firestore access from the Google Firestore api如何阻止来自 Google Firestore api 的 Google Firestore 访问
【发布时间】:2022-01-24 20:19:44
【问题描述】:

我正在本地模式下使用 Google Firestore,并使用 Go 中的“cloud.google.com/go/firestore”api 对其中的数据进行 CRUD。只要您知道项目 ID 并在服务器上使用 Firestore API,对数据的访问是完全开放的。在弄清楚如何保护数据免受服务器攻击之前,我不想尝试这些规则。同样,所有 API 都需要访问数据的项目 ID,因此我需要先锁定它,然后再进一步移动。规则仅适用于我阅读的移动/网络客户端,服务器端客户端完全绕过规则。请帮忙。我不想使用 Firebase API,因为攻击者仍然可以使用 Firestore api 来访问数据。

【问题讨论】:

  • 如果您根本没有使用 Firebase 及其安全规则,那么您的数据库就不是“完全开放的”。如果您使用的是 Firebase 规则,那么您可以简单地编写它们以拒绝所有“广泛开放”的访问,并仅允许来自使用您允许的服务帐户凭据的后端客户端的访问。如果您观察到其他情况,请编辑问题以显示任何人都可以采取的步骤,将他们的 Firestore 数据库设置为超出预期的“完全开放”。

标签: go google-cloud-platform google-cloud-firestore


【解决方案1】:

从您问题中的有限信息中不清楚,但是您的 Firestore 数据库对任何拥有项目 ID 的人开放。

该服务可供任何具有有效凭据的事物(人|机器)访问。无论是人类,例如Gmail 帐户服务帐户密钥持有者。

在任何一种情况下,只有您明确添加到项目中的身份才能访问其资源,然后只有具有适当 IAM 角色|权限的身份。

Google 提供了一个名为 Application Default Credentials (ADCs) 的优雅工具,可简化客户端身份验证。

怀疑您的代码正在使用 ADC 对您的项目|服务进行身份验证。

【讨论】:

  • 只有在项目部署了明确允许的 Firebase 安全规则时,数据库才会“完全开放”。默认情况下不是这种情况,而只能通过显式配置来实现。 OP 没有说他们的配置是什么,所以我们不能确定。
  • 谢谢 Daz,毕竟是 ADC。我发誓我要疯了,但只有在另一台机器上尝试了我的代码后,我才收到消息“无法创建客户端:谷歌:找不到默认凭据......”所以是的,访问未打开,这更像是一种配置我错过了一步。
【解决方案2】:

只要您知道项目 ID 并在服务器上使用 Firestore API,对数据的访问是完全开放的。

如果这是一个问题,请考虑禁止 Firebase security rules 中对您的 Firestore 数据库的所有访问。

还可以在这里查看我的回答,以了解为什么共享您的项目 ID 不是安全问题,如果您想允许从客户端设备直接访问,实际上是必要的:Is it safe to expose Firebase apiKey to the public?。如果您不想允许直接客户端访问,关闭安全规则(因为它们是 default,除非您在创建数据库时选择 test mode)是要走的路.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2018-11-26
    • 2019-11-20
    • 2021-01-04
    相关资源
    最近更新 更多