问题描述
在credentials.js 文件和.env 文件中存储敏感凭据有什么区别?
使用 module.exports,您可以编写:
const KEY = require("./credentials.js");
而使用 .env 文件,您可以编写:
const KEY = process.env.KEY;
在这两种情况下,您都实现了使某些变量成为“全局”变量并在全局范围内访问它的相同目标。为什么人们使用 .env 和 dotenv 而不是只使用 Node 的内置 module.exports 系统?
解决方法
环境变量旨在在机器(系统)上定义。 环境变量可用于在同一系统上运行的多个应用程序。
导出的变量仅限于您正在运行的应用程序。
就您而言:如果您想在 3 个服务器(Dev、QA、Prod)上部署您的应用程序,但使用不同的凭据,则每次更改凭据是没有意义的部署。即使您为每个服务器定义凭据,它也必须是静态的,如果您想更改它,您必须更改文件并再次部署应用程序以反映更改。如果是环境变量,您只需要在目标系统上更改它并重新启动服务器,因此无需再次部署应用程序。
当多个环境变量发生变化时,管理会变得一团糟。此外,在与其他服务集成时,环境变量也很有用。
对于环境变量的安全性,您可以阅读this
存储凭据时:
- 存储在配置文件中时存在将凭据暴露给版本控制系统的风险
- 如果系统遭到入侵,凭证的存储位置无关紧要
- 您可以使用运行时配置文件。找到它here