Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过删除安全信息使Node server.js文件更安全_Javascript_Node.js - Fatal编程技术网

Javascript 通过删除安全信息使Node server.js文件更安全

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(

我有一个公共git[hub]项目,现在准备将其从开发切换到生产。我们在研究领域,所以我们也喜欢分享我们的代码

我有一个
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 secondnconf。您可以将配置文件与
env
变量链接在一起,如果需要,它们只需覆盖即可。如果一个文件不在那里,它只会移动到下一个语句。关于我使用Azure发布的一个类似问题的详细说明,请参见此处:通常我直接从
process.env.*
获取所有此类变量,并使用
node env file
npm模块在开发时设置它们。