Firebase 服务帐户私钥暴露给 admin.firestore

Firebase service account private key exposed to admin.firestore

我在 node.js 后端将 firebase admin 配置到一个名为 admin 的变量中,然后调用 admin.firestore()。当我执行 console.log(admin.firestore()) 时,我看到我的服务帐户的私钥显示在后端终端中。这是我看到的控制台日志:

Firestore {
  _settings: {
    credentials: {
      private_key: 'my actual private key',
      client_email: 'xxxxx'
    },
    projectId: 'pxxxx3',
    firebaseVersion: '8.13.0',
    libName: 'gccl',
    libVersion: '3.8.6 fire/8.13.0'
  },
  _settingsFrozen: false,
  _serializer: Serializer { createReference: [Function], allowUndefined: false },
  _projectId: 'xxxxx',
  registeredListenersCount: 0,
  _lastSuccessfulRequest: 0,
  _backoffSettings: { initialDelayMs: 100, maxDelayMs: 60000, backoffFactor: 1.3 },
  _preferTransactions: false,
  _clientPool: ClientPool {
    concurrentOperationLimit: 100,
    maxIdleClients: 1,
    clientFactory: [Function],
    clientDestructor: [Function],
    activeClients: Map {},
    terminated: false,
    terminateDeferred: Deferred {
      resolve: [Function],
      reject: [Function],
      promise: [Promise]
    }
  }
}

我有点担心这可能存在安全风险。尽管它在我后端的代码中。但我应该担心吗?

如果数据仅在您的后端可用,那么它是“安全的”,因为只有有权访问您的后端的人才能看到它。问题不在于数据在日志中,问题在于您允许谁查看该日志。

如果数据永远不会逃逸到客户端应用程序,那么您就不必担心互联网上随机的人会看到您的凭据。

恕我直言,如果外部实体可以登录您的系统,则您遇到了不同类型的问题。

如果你仔细想想,大多数环境变量都必须在运行时放置在某个地方。它们不应在您的代码中进行硬编码,但在运行时,您需要一种机制来确保将这些值复制到您的系统中。之后就是授权,只有拥有正确权限的用户才能进入您的系统。