Javascript 通过删除安全信息使Node server.js文件更安全
我有一个公共git[hub]项目,现在准备将其从开发切换到生产。我们在研究领域,所以我们也喜欢分享我们的代码 我有一个Javascript 通过删除安全信息使Node server.js文件更安全,javascript,node.js,Javascript,Node.js,我有一个公共git[hub]项目,现在准备将其从开发切换到生产。我们在研究领域,所以我们也喜欢分享我们的代码 我有一个server.js文件,我们从node server.js开始,就像大多数教程一样。 其中包含SQL server的连接信息以及HTTPS证书的位置。它看起来像这样: var https = require('https'); var express = require('express'); var ... = require('...'); var fs = require(
server.js
文件,我们从node server.js
开始,就像大多数教程一样。其中包含SQL server的连接信息以及HTTPS证书的位置。它看起来像这样:
var https = require('https');
var express = require('express');
var ... = require('...');
var fs = require('fs');
var app = express();
var Sequelize = require('sequelize'),
// ('database', 'username', 'password');
sequelize = new Sequelize('db', 'uname', 'pwd', {
logging: function () {},
dialect: 'mysql',
…
});
…
var secureServer = https.createServer({
key: fs.readFileSync('./location/to/server.key'),
cert: fs.readFileSync('./location/to/server.crt'),
ca: fs.readFileSync('./location/to/ca.crt'),
requestCert: true,
rejectUnauthorized: false
}, app).listen('8443', function() {
var port = secureServer.address().port;
console.log('Secure Express server listening at localhost:%s', port);
});
在PHP中,您可以将连接信息保存在另一个文件中,然后将文件(以及变量)导入要使用的范围。SQL连接(db、uname、pwd)和证书的文件位置(为了安全起见)是否可以这样做,以便我们可以将
server.js
文件提交到git并忽略/不遵循机密文件?您可以通过许多不同的方式来实现这一点。一种是使用环境变量,如MYSQL\u USER=foo MYSQL\u PASSWD=bar node server.js
,然后在代码中使用process.env.MYSQL\u USER
您还可以按照建议读取文件。您可以执行require(“config.json”)
,节点将自动解析json并将其作为JavaScript构造导入。然后,您可以.gitignore
config.json
,并可能提供一个示例.config.json
如果您想同时支持这两个功能,至少有一个库允许您简单地执行此操作:。您可以始终将配置信息存储在JSON文件中。节点本机支持JSON文件。您可以简单地要求:
var conf = require('myconfig.json');
var key = fs.readFileSync(conf.ssl_keyfile);
还有第三方库用于管理添加了各种功能的JSON配置文件。我个人喜欢它,因为它允许您发布一个带有空值的示例配置文件,然后,在不修改示例配置文件的情况下,您可以使用.local.json
文件覆盖这些值。它使在repos中处理配置文件变得更容易,也使发布对配置文件的更改变得更容易。下面是关于如何组织部署的内容
基本上,所有应用程序关键变量(如db密码、密钥等)都应该可以通过环境变量访问
你可以这样做
// config.js
const _ = require('lodash');
const env = process.env.NODE_ENV || 'development';
const config = {
default: {
mysql: {
poolSize: 5,
},
},
development: {
mysql: {
url: 'mysql://localhost/database',
},
},
production: {
mysql: {
url: process.env.DB_URI,
},
},
};
module.exports = _.default(config.default, config[env]);
// app.js
const config = require('./config');
// ....
const sequelize = new Sequelize(config.mysql.url);
代码不是完美的,但应该足以让人产生想法。I second
nconf
。您可以将配置文件与env
变量链接在一起,如果需要,它们只需覆盖即可。如果一个文件不在那里,它只会移动到下一个语句。关于我使用Azure发布的一个类似问题的详细说明,请参见此处:通常我直接从process.env.*
获取所有此类变量,并使用node env file
npm模块在开发时设置它们。