使用存储在全局变量中的 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 的文件)。
一段时间后我放弃并开始实现类似的东西:
- 我的
.env
文件现在是 env.ts
- 环境变量现在是对象属性
export const env = {
ENDPOINT: 'http://url.com',
}
- 为了使用我的环境,我将其导入我的应用程序入口点并将其设置为全局变量
import { env } from './env'
...
global.env = env;
- 我现在使用 global.env 而不是 process.env
console.log(global.env.ENDPOINT)
由于这是一个 JS 应用程序,代码会发送给请求该页面的用户,而且由于我的环境现在是代码,我担心这可能会带来一些安全隐患。
我显然不会发送我的 google 帐户密码,但如果我需要添加一个 api 密钥,它就会暴露给任何有足够耐心寻找它的人,是吗?不是吗?
如果这确实有安全隐患,各种 dotenv 模块如何处理这个问题?如果我需要显示 google 地图,我必须以任何一种方式发送 api 键,不是吗?区别在哪里?
无论您使用什么方法(dotenv、代码常量等),您的客户端应用程序都需要知道一些 API 密钥,然后可以被足够积极的攻击者访问。
您可以尝试一些缓解措施(通常是从服务器加载这些密钥),但无论如何它们最终都会在客户端内存中。
dotenv 方法的主要优点v.s。代码常量是为了确保不会将此类密钥提交到您的存储库中,并便于在需要不同密钥的环境之间切换。
几天前,我试图在我的 Expo 管理的 React Native 应用程序中实现环境。我尝试使用 react-native-dotenv 模块,但我很快遇到了有关环境变量更改的问题(我更改某些内容的唯一方法是编辑每个调用 process.env 的文件)。
一段时间后我放弃并开始实现类似的东西:
- 我的
.env
文件现在是env.ts
- 环境变量现在是对象属性
export const env = {
ENDPOINT: 'http://url.com',
}
- 为了使用我的环境,我将其导入我的应用程序入口点并将其设置为全局变量
import { env } from './env'
...
global.env = env;
- 我现在使用 global.env 而不是 process.env
console.log(global.env.ENDPOINT)
由于这是一个 JS 应用程序,代码会发送给请求该页面的用户,而且由于我的环境现在是代码,我担心这可能会带来一些安全隐患。
我显然不会发送我的 google 帐户密码,但如果我需要添加一个 api 密钥,它就会暴露给任何有足够耐心寻找它的人,是吗?不是吗?
如果这确实有安全隐患,各种 dotenv 模块如何处理这个问题?如果我需要显示 google 地图,我必须以任何一种方式发送 api 键,不是吗?区别在哪里?
无论您使用什么方法(dotenv、代码常量等),您的客户端应用程序都需要知道一些 API 密钥,然后可以被足够积极的攻击者访问。
您可以尝试一些缓解措施(通常是从服务器加载这些密钥),但无论如何它们最终都会在客户端内存中。
dotenv 方法的主要优点v.s。代码常量是为了确保不会将此类密钥提交到您的存储库中,并便于在需要不同密钥的环境之间切换。