使用存储在全局变量中的 JS 对象而不是 .env 文件安全吗?

Is using a JS object stored inside a global variable instead of a .env file secure?

几天前,我试图在我的 Expo 管理的 React Native 应用程序中实现环境。我尝试使用 react-native-dotenv 模块,但我很快遇到了有关环境变量更改的问题(我更改某些内容的唯一方法是编辑每个调用 process.env 的文件)。

一段时间后我放弃并开始实现类似的东西:

export const env = {
    ENDPOINT: 'http://url.com',
}
import { env } from './env'

...

global.env = env;
console.log(global.env.ENDPOINT)

由于这是一个 JS 应用程序,代码会发送给请求该页面的用户,而且由于我的环境现在是代码,我担心这可能会带来一些安全隐患。

我显然不会发送我的 google 帐户密码,但如果我需要添加一个 api 密钥,它就会暴露给任何有足够耐心寻找它的人,是吗?不是吗?

如果这确实有安全隐患,各种 dotenv 模块如何处理这个问题?如果我需要显示 google 地图,我必须以任何一种方式发送 api 键,不是吗?区别在哪里?

无论您使用什么方法(dotenv、代码常量等),您的客户端应用程序都需要知道一些 API 密钥,然后可以被足够积极的攻击者访问。

您可以尝试一些缓解措施(通常是从服务器加载这些密钥),但无论如何它们最终都会在客户端内存中。

dotenv 方法的主要优点v.s。代码常量是为了确保不会将此类密钥提交到您的存储库中,并便于在需要不同密钥的环境之间切换。