正确隐藏数据库凭据

问题描述 投票:1回答:1

您可能会看到,我有我的数据库连接文件和另一个“受保护的”文件,其中包含我的凭据,并且该文件包含在.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;
javascript node.js mongodb security mongoose
1个回答
2
投票

...我有我的数据库连接文件和另一个“受保护的”文件(我的凭据在其中,并且此文件包含在.gitignore中)。我导入它并到达数据。

正确的方法是使用envrironmental variables

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

至少有几个原因通常是这样进行的:

  • 凭据在查看存储库内容的人员可以读取的文件中不存在。克隆存储库的人不需要知道您的数据库凭据。
  • 凭据在不同环境之间可能有所不同。您可能在本地开发计算机上使用其他数据库,而在远程生产服务器中使用其他数据库。

这里是设置环境变量的方式(这对于Linux,其他OS可能有所不同:]]

$ 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开始过程。由于定义了package.json命令的npm start始终提交到存储库,因此无法实现隐藏凭据的整个目的。

© www.soinside.com 2019 - 2024. All rights reserved.