如何使用 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
});
我有 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
});