在CentOS上配置Node.js以增强安全性是一个涉及多个方面的过程。以下是一些关键的安全配置步骤和建议:
更新系统:
sudo yum update -y
安装Node.js和npm:
sudo yum install -y epel-release
sudo yum install -y nodejs npm
配置环境变量:
/etc/profile
或~/.bashrc
文件,设置Node.js和npm的路径。export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile
使用NVM管理Node.js版本:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install 14
nvm use 14
配置防火墙:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
使用HTTPS:
sudo npm install -g https-express
数据验证:
validator
)验证用户输入。const validator = require('validator');
const email = 'foo@bar.com';
console.log(validator.isEmail(email)); // true
防止SQL注入:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'me',
password: 'secret',
database: 'my_db'
});
connection.connect();
connection.query('UPDATE users SET ? WHERE id = ?', [req.body.first_name, 1001], function (err, result) {
// ...
});
使用安全的会话管理:
const crypto = require('crypto');
const secret = 'your-secret-key';
function signSession(sessionData) {
const hmac = crypto.createHmac('sha256', secret);
hmac.update(JSON.stringify(sessionData));
return hmac.digest('hex');
}
function verifySession(sessionData, signature) {
const newSignature = signSession(sessionData);
return newSignature === signature;
}
限制访问权限:
app.use((req, res, next) => {
if (req.ip !== '123.123.123.123') {
return res.status(403).send('Forbidden');
}
next();
});
错误处理:
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
使用安全框架和库:
helmet
)。const express = require('express');
const helmet = require('helmet');
const app = express();
app.use(helmet());
通过以上步骤和建议,你可以显著提高在CentOS上运行的Node.js应用的安全性。