如何使用 Node.js 安全地存储数据库的 IP 地址、用户名和密码?

How can I securely store the IP address, username and password of a database using Node.js?

我有 Node.js 连接到 MySQL 数据库的代码:

var mysql = require('mysql')
var express = require('express')
var app = express()

var connection = mysql.createPool({
    connectionLimit: 50,
      host     : 'ip',
    user     : 'username',
      password : 'pass',
      database : 'mydb'
});


app.get('/', function(req, resp) {
    connection.getConnection(function(error, tempCont) {
        if(!!error) {
            tempCont.release();
            console.log('Error');
        } else {
            console.log('Connected!');

            tempCont.query("select * from table", function(error, rows, fields) {
                tempCont.release();
                if(!!error) {
                    console.log('Error in the query');
                } else {
                    resp.json(rows);
                }
            });
        }
    })
})

console.log("listening requests...")
app.listen(1337);

如何确保用于连接到数据库的 IP 地址、用户名和密码在代码或配置文件中不可见?

您应该配置您的系统,以便您的服务 运行 作为自己的用户使用自己的受保护文件。这提供了一些保护,以便即使其他服务受到威胁,入侵用户的访问也与系统的其他组件隔离。不要 运行 作为 root 做事。

至于如何存储和访问机密,由您决定。如果需要,您可以拥有一个配置文件。另一种选择是使用环境变量。最终;但是,您的秘密必须以明文形式存储在某个地方,供您的系统读取和使用。

另一种值得一提的方法是,您可以通过专门的机密服务将机密与应用程序分开。您的所有应用程序都必须了解此服务,并且它们可以从那里请求它们正常运行所需的秘密。这有一个明显的警告,即您的所有应用程序在启动时都依赖于机密服务 - 如果该服务关闭,您的应用程序将无法启动或重新启动。

通过以下方式安装 dotenv 模块:npm install --save dotenv

在根文件夹下创建.env文件并记下代码:

DB_CONLIMIT=50
DB_HOST=ip
DB_USER=username
DB_PASSWORD=pass
DB_DATABASE=mydb

在您的 JavaScript 文件中:

var mysql = require('mysql');
var express = require('express');
var app = express();
const dotenv = require('dotenv').config();

var connection = mysql.createPool({

     connectionLimit : process.env.DB_CONLIMIT,
     host            : process.env.DB_HOST,
     user            : process.env.DB_USER ,
     password        : process.env.DB_PASSWORD ,
     database        : process.env.DB_DATABASE
});