Node.js应用程序应该将密钥存储在哪里
保护敏感数据/凭据,如第三方API凭据、会话密钥、数据库连接凭据、安全令牌、加密/解密密钥非常重要,因为公开暴露这些凭据可能导致您的账户被攻击,从而在您的账户上产生意外费用。将密钥值放在源代码中(通过硬编码)或提交凭据(公开)您的私钥、密码或其他敏感详细信息到版本控制中可能导致灾难性后果。处理Node.js中的配置密钥或凭据(如API密钥)的最佳方法是使用 环境变量 。
环境变量: 环境变量可以从应用程序外部配置代码中的值。环境变量是动态的名称/值对,可以创建任意数量的环境变量。环境变量存在于应用程序所部署的操作系统或容器之外。大多数应用程序首先在开发环境中进行部署,然后再实际部署到生产环境中。因此,我们必须确保每个环境都已正确配置。环境变量可以为不同的环境提供不同的配置选项。
一些常见的环境变量示例包括:
- 数据库连接信息
- API端点
- 第三方API密钥和机密
- 电子邮件ID和密码
- HTTP端口/地址
设置环境变量:
设置环境变量的语法如下,其中 ENV_VARIABLE_NAME 是我们的环境变量的名称, VALUE 是该变量的值。
ENV_VARIABLE_NAME=VALUE
Node.js提供了 process 对象,它是一个全局对象,提供有关当前Node.js进程的信息和控制。作为全局对象,它始终可用于Node.js应用程序,无需使用require()。process对象有一个属性 .env ,该属性返回一个包含用户环境的对象。
读取环境变量:
要从 .env文件 中读取环境变量,我们需要一些解析器来使其工作。解析器逐个读取变量并将其解析为环境变量。有一个npm包称为 dotenv ,它是一个零依赖的模块,将环境变量从 .env文件 加载到process.env对象中。
模块安装: 要安装此包,请在终端中输入以下命令:
npm install dotenv
需要的模块: 在应用程序中使用以下代码引入 dotenv 包:
require('dotenv').config();
现在,我们可以使用 process.env.[ENV_VARIABLE_NAME] 访问任何环境变量。
示例: 假设我们正在开发一个电子商务Node.js应用程序,我们有以下环境变量,如服务器端口号、数据库连接URL和密码、stripe API密钥、电子邮件ID和密码、会话密钥等。
步骤1: 在项目的根文件夹中创建一个名为 ‘.env’ 的文件,该文件将存储我们的所有环境变量。例如,我们的文件如下所示:
TEST.env
PORT=8080
DATABASE_URL=mongodb://localhost:27017/GFG
DATABASE_PASSWORD=<your password>
STRIPE_API_KEY=<your stripe api key>
EMAIL_ID=geeks.classes@geeksforgeeks.org
EMAIL_PASSWORD=<your email password>
步骤2: 创建一个 index.js
文件,我们将在该文件中访问我们定义的环境变量。
index.js
require('dotenv').config({ path: './TEST.env' })
console.log("PORT:", process.env.PORT);
console.log("DATABASE_URL:", process.env.DATABASE_URL);
console.log("DATABASE_PASSWORD:", process.env.DATABASE_PASSWORD);
console.log("EMAIL_ID:", process.env.EMAIL_ID);
console.log("STRIPE_API_KEY:", process.env.STRIPE_API_KEY);
console.log("EMAIL_PASSWORD:", process.env.EMAIL_PASSWORD);
步骤3: 使用以下命令执行 index.js 文件:
node index.js
输出:
注意: 始终在 .gitignore 文件中添加 .env 文件 ,以免将其提交到版本控制系统中。如果您不小心提交了 .env 文件 ,请尽快生成新的 API 密钥并更改密码,以避免任何灾难性影响,并将其从版本控制系统的跟踪中删除。