我有以下NodeJS代码,我成功使用mssql模块执行存储过程。我使用var config = {..,密码:' ....',...}部分,我在此定义了用户和密码。
如何使以下代码安全,即我不需要硬代码或在此文件或任何外部文件中有任何密码。想法是使用加密密码进行连接,然后它将执行存储过程。
我看到NodeJS中有一个名为crypto的模块,但我试图看看如何将其插入到我的代码中以删除真实密码(至少)。
http://lollyrock.com/articles/nodejs-encryption/
如果我使用环境变量并直接使用它们来填充密码变量,我看到一些帖子说甚至可以公开环境变量。 Hardcoded mysql user and password in Node.js
感谢任何帮助。
//This computerName is what we'll find in our mssql server to see
//if the server entry exist or not and the stored procedure will take this as a parameter.
var computerName = "some.fake.server.com";
var secProfile = "";
var sql = require('mssql');
var config = {
user: 'dbuser',
//I want to get rid of the following password line from this section.
password: 'secure9ass',
server: 'dbserver.domain.com',
database: 'DBName',
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
}
}
sql.connect(config).then(function(output) {
// Stored Procedure
new sql.Request()
.input("ComputerName", sql.VarChar(100), computerName)
.execute('dbo.getSysStatus_ByName').then(function(recordsets) {
console.dir(recordsets);
}).catch(function(err) {
// ... error checks
console.log('ERROR1::: ' + err)
console.log("----")
console.log(err)
console.log("====")
console.log(recordsets)
console.log("----")
console.log('ERROR2::: '+ sqlOutput);
console.log('ERROR3::: '+ request.parameters.sqlOutput.value);
});
console.log(output);
}).catch(function(err) {
// ... error checks
console.log('ERROR5::: '+ err);
});
答案 0 :(得分:0)
好回答,即使环境变量也可以公开,最好的方法可能是使用readline。这是Node.js中的内置模块,其作用类似于Python中的prompt()
。它将要求用户输入。这样,文件或代码中不会有任何信息泄漏。但是,使用readline的缺点是您每次必须手动输入密码,这在开发过程中可能会很烦人。因此,我建议在部署之前,将密码设置为硬编码,然后稍后再切换到readline方法。
示例代码:
const readline = require('readline');
const rl = readline.createInterface({input: process.stdin, output: process.stdout})
rl.question('Enter you password: ', answer => {
// Authentication here
rl.close()
})
很高兴回答您的问题。