在 .env 文件中存储私有值是否安全?

hyo*_*oon 13 security node.js express dotenv

我正在尝试使用 express 框架构建 node.js 服务器,并且我想在我的服务器中存储管理 API 的私钥。
我现在使用 .env 文件来存储这些值,并在我的路由中通过调用 like 来使用这些值process.env.ADMIN_KEY

问题
处理私人数据的方式安全吗?或者还有比这更好的方法?

Mar*_*der 12

将您的机密存储在 .env 文件中比在源代码本身中更安全。但是你可以做得更好。以下是我见过的机密管理方式,从最不安全到最安全:

  1. 对代码中的秘密进行硬编码。

    • 优点:没有。不要这样做。
    • 缺点:您的开发人员会将您的生产机密视为他们日常工作的一部分。您的机密将被检查到源代码管理中。两者都是安全风险。此外,您必须修改代码才能在不同的环境中使用它,例如开发、测试和生产。
  2. 将机密放在从 .env 文件加载的环境变量中。

    • 优点:开发人员不会看到您的生产机密。您可以在开发、测试和生产中使用不同的秘密,而无需修改代码。
    • 缺点:恶意代码可以读取您的秘密。应用程序的大部分代码可能是开源库。糟糕的代码可能会在您不知情的情况下潜入。
  3. 将机密放在专用的机密管理器中,例如HashiCorp 的 Vault或Google Cloud 的Secret Manager

    • 优点:恶意代码更难读取您的机密。您可以审计谁访问了机密。您可以为谁更新秘密以及谁可以读取它们分配细粒度的角色。您可以更新和版本化您的机密。
    • 缺点:这是您学到的附加技术。它可能是您需要设置和管理的附加软件,除非它包含在您使用的云平台中。

所以选择实际上是在上面的第 2 项和第 3 项之间。您选择哪一个取决于您的机密的敏感程度以及使用专门的机密管理器需要多少额外的工作。例如,如果您的项目在 Google Cloud Platform 上运行,则 Secret Manager 只需一个 API 调用即可。在其他主要云平台上可能同样容易,但我没有第一手经验。

  • @JobinS 开发和测试目的 (3认同)
  • @JobinS 许多人在开发、测试和生产环境中使用不同的数据库。因此,这三个环境需要不同的数据库地址和密码。 (2认同)

Zee*_*mon 6

简单的答案是YES, .env 用于存储密钥和秘密。它不会推送到您的存储库,即 github 或 bitbucket 或您存储代码的任何地方。这样它就不会暴露。

以下是正确使用的教程链接:

  • @YvesNg 如果您使用的是物理或虚拟机,即 EC2 或 Azure VM 等,那么您可以登录到服务器,然后在您的代码/存储库所在的位置创建 .env 并复制粘贴其内容。如果您使用 PaaS 即 Heroku 或其他东西,那么您可以直接管理 en 变量,而无需使用 .env 文件,因为它们提供了选项。 (2认同)