2025年还应该使用 dotenv 吗

  • infisical
  • 发布于 2025-02-26 16:12
  • 阅读 81

文章讨论了 2025 年 Node.js 环境变量管理的最佳实践:本地开发可优先使用 Node.js 20.6.0+ 原生 --env-file,旧版本可继续使用 dotenv;但对生产环境中的密钥、API Key、数据库凭证等敏感信息,不应依赖 .env 文件,而应使用 Infisical 这类密钥管理工具,以获得加密存储、权限控制、版本回滚和审计日志等能力。文章还给出了从 .env 迁移到 Infisical 的基本步骤,并强调不要把敏感信息提交到版本控制。

2025 年你还应该使用 dotenv 吗?

发布于 2025 年 2 月 24 日,星期一

Blog image

TL;DR:尽管 Node.js v20.6.0+ 引入了原生 --env-file 标志,可以直接从文件中读取环境变量并将其注入 process.envdotenv 仍然是最受欢迎的 npm 依赖之一(每周下载量 4500 万+!)。无论你如何选择,对于不应暴露的敏感值,例如 API keys 和其他 secrets,你都应该考虑使用像 Infisical 这样的 secrets manager。

你知道吗?安全研究人员发现,在 5.8 万多个网站暴露的环境文件中,包含了超过 100 万个 secrets

我们之前在这篇博客中曾主张弃用 .env files,因为当它们用于存储敏感信息时,我们建议改用像 Infisical 这样的 secrets manager。

然而,并不是所有 environment variables 都是敏感的,一些开发者在本地开发时仍然更倾向于使用 .env files。在本文中,我们将探讨在 Node.js 应用中管理 environment variables 的最佳实践,以及如何避免常见陷阱。

简要回答

  • 对于使用 Node.js v20.6.0+ 的本地开发:使用原生 .env 支持和 --env-file 标志
  • 对于 secrets(尤其是在 prod 中):使用 Infisical 或类似的 secret managers
  • 对于开发中使用较旧版本的 Node.js:使用 dotenv npm package

开发 vs 生产:最佳实践

本地开发选项

  1. 原生 Node.js 支持(v20.6.0+)
node --env-file=.env app.js
  1. dotenv npm package
require('dotenv').config()

用于 secrets 的生产级解决方案

对于生产部署,使用 .env files 存储 secrets 会带来几个安全风险:

  • 本地存储的 secrets 未加密
  • 团队之间难以同步 secrets
  • 不同环境缺乏访问控制
  • 存在意外提交到 version control 的风险
  • 缺乏 secret 版本管理和审计日志

相反,使用 Infisical 来管理你的 secrets:

// 安装 Infisical CLI
npm install -g @infisical/cli

// 使用 Infisical 运行你的应用程序
infisical run --env=<secret-env> --path=<path/to/secret> -- node app.js

阅读 Infisical CLI 文档,了解有关设置和管理 secrets 的更多细节。

安全考虑

为什么要超越 .env files?

  1. .env files 不安全
  • 它们未加密
  • 它们很容易泄露(参见前文)
  • 你无法追踪谁访问了哪些 secrets,或它们何时被使用。
  1. .env files 不具备可扩展性
  • 它们很难在团队成员之间同步
  • 管理 environment variables 时没有单一事实来源
  • 团队不得不通过聊天或电子邮件分享 secrets(不良做法)
  1. .env files 不够健壮
  • 在不同环境之间更新 secrets 是一个手动且容易出错的过程
  • 你无法追踪 secrets 的变更或是谁做出的更改
  • 回滚到先前版本很困难

从 .env 迁移到 Infisical 的指南

  1. 安装 Infisical CLI:
npm install -g @infisical/cli
  1. 在你的项目中初始化 Infisical:
infisical init
  1. 更新你的应用启动命令:

Before:

{
  "scripts": {
    "start": "node --env-file=.env app.js"
  }
}

After:

{
  "scripts": {
    "start": "infisical run --env=<secret-env> --path=<path/to/secret> -- node app.js"
  }
}

常见问题

如何在 Node.js 中设置 process.env

你有三种主要选择:

  • 使用 --env-file 标志(Node.js 20.6.0+)
  • 使用 dotenv npm package
  • 使用像 Infisical 这样的 secrets manager(推荐用于生产)

2025 年我还应该使用 dotenv 吗?

虽然 dotenv 适合本地开发,但并不推荐用于生产环境。相反:

  • 对于非敏感值,在 Node.js 20.6.0+ 中使用原生 .env 支持
  • 使用 Infisical 管理 secrets,以确保适当的安全性和团队协作
  • 只有在你需要在开发中支持较旧版本的 Node.js 时,才考虑使用 dotenv

我怎么知道一个 environment variable 是否敏感?

密码、API keys、access tokens、数据库凭据或任何形式的身份验证凭据都被视为敏感信息。此外,任何存储个人身份信息(PII)或其他机密数据的变量也应被视为敏感。

如有疑问,最好采取谨慎态度,将所有 environment variables 都视为敏感。

与 .env files 相比,使用 Infisical 有什么好处?

  • 你的 secrets 始终保持加密状态,不像 .env files 中的纯文本。
  • 你团队中的每个人都会自动获得正确的 secrets,并具有适当的访问控制。
  • 如有需要,你可以轻松切换回 secrets 的任何先前版本。
  • 每次 secret 访问和更改都会被跟踪,为你提供清晰的安全审计轨迹。
  • 可与 GitHub Actions、AWS 和其他部署工具顺畅协作。
  • 可以在你自己的服务器上运行,以完全控制你的 secrets。

生产部署最佳实践

  • 绝不要将 secrets 提交到 version control
  • 在本地开发中使用 Infisical 的 CLI
  • 实施 secret rotation policies
  • 通过审计日志监控访问
  • 对 development/staging/production 使用不同的 secrets
  • 定期更新 secrets 和访问策略

资源

Tony Dang

Product, Infisical

  • 原文链接: infisical.com/blog/stop-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
infisical
infisical
江湖只有他的大名,没有他的介绍。