繁体   English   中英

正确隐藏数据库凭据

[英]Correctly hiding database credentials

如您所见,我有我的 db 连接文件和另一个“受保护”文件,我的凭据所在的位置,并且该文件包含在 .gitignore 中。 我导入它并到达数据。 很基本。 因此我的问题是:

  1. 这是正确的方法吗?
  2. 如果没有,我该怎么做? 另外:如何为我的帐户、连接添加额外的安全性?
  3. 假设我有一个私人收藏,没有人可以看到,我怎么能特别保护这个收藏? 我的意思是,假设有密码或两步验证。

当前代码:

const mongoose = require("mongoose");
const mongoCredentials = require("../protected/mongoCredential");

const URI = `mongodb+srv://${mongoCredentials.username}:${mongoCredential.password}
              @firstcluster-eldi8.mongodb.net/culturapp?retryWrites=true&w=majority`;

mongoose.connect(URI, { useUnifiedTopology: true, useNewUrlParser: true })
  .then(db => console.log("MongoDB is connected"))
  .catch(err => console.log(">> ERROR: ",err));

module.exports = mongoose;

...我有我的 db 连接文件和另一个“受保护”文件,我的凭据所在的位置,并且该文件包含在 .gitignore 中。 我导入它并到达数据..

正确的做法是使用环境变量

使用环境变量

环境变量是在环境中设置的,即您的本地开发机器或远程生产服务器。 然后,在您的应用程序中,您读取环境变量并适当地使用它们。

通常这样做有(至少)几个原因:

  • 凭证不存在于查看存储库内容的人可以读取的文件中。 克隆存储库的人不需要知道您的数据库凭据。
  • 凭据可能因环境而异。 您可能在本地开发机器上使用不同的数据库,在远程生产服务器上使用不同的数据库。

以下是设置环境变量的方法(这是针对 Linux 的,其他操作系统可能会有所不同):

$ export MONGO_DB_USERNAME=foo
$ export MONGO_DB_PASSWORD=bar

以下是您在 Node.js 中阅读它们的方式:

console.log(process.env.MONGO_DB_USERNAME) // logs 'foo'
console.log(process.env.MONGO_DB_PASSWORD) // logs 'bar'

或在启动时将变量传递给进程

或者,您可以在启动过程时传递变量,如下所示:

$ MONGO_DB_USERNAME=foo MONGO_DB_PASSWORD=bar node app.js

但是,通常不鼓励这样做,因为您很可能是通过npm start script开始您的流程。 由于定义了npm start命令的package.json始终提交到存储库,因此无法实现隐藏凭据的全部目的。

就像你提到的那样,使用环境变量更像是通过混淆来确保安全。

我会尝试将凭据放在单独的配置文件中。 通过一些设计,加密此文件并将这些密钥存储在安全飞地或 TPM 中。

检查这个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM