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]
}
}
}
我有点担心这可能存在安全风险。尽管它在我后端的代码中。但我应该担心吗?
如果数据仅在您的后端可用,那么它是“安全的”,因为只有有权访问您的后端的人才能看到它。问题不在于数据在日志中,问题在于您允许谁查看该日志。
如果数据永远不会逃逸到客户端应用程序,那么您就不必担心互联网上随机的人会看到您的凭据。
恕我直言,如果外部实体可以登录您的系统,则您遇到了不同类型的问题。
如果你仔细想想,大多数环境变量都必须在运行时放置在某个地方。它们不应在您的代码中进行硬编码,但在运行时,您需要一种机制来确保将这些值复制到您的系统中。之后就是授权,只有拥有正确权限的用户才能进入您的系统。
我在 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]
}
}
}
我有点担心这可能存在安全风险。尽管它在我后端的代码中。但我应该担心吗?
如果数据仅在您的后端可用,那么它是“安全的”,因为只有有权访问您的后端的人才能看到它。问题不在于数据在日志中,问题在于您允许谁查看该日志。
如果数据永远不会逃逸到客户端应用程序,那么您就不必担心互联网上随机的人会看到您的凭据。
恕我直言,如果外部实体可以登录您的系统,则您遇到了不同类型的问题。
如果你仔细想想,大多数环境变量都必须在运行时放置在某个地方。它们不应在您的代码中进行硬编码,但在运行时,您需要一种机制来确保将这些值复制到您的系统中。之后就是授权,只有拥有正确权限的用户才能进入您的系统。