Debian下Node.js安全设置指南
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get update && sudo apt-get upgrade nodejs npm
sudo -u <username>命令;或通过pm2等进程管理工具以非root用户启动应用。ufw(Uncomplicated Firewall)或iptables限制对Node.js应用端口的访问(如HTTP的80端口、HTTPS的443端口),仅允许必要IP段通信。示例:sudo ufw allow 443/tcp # 允许HTTPS
sudo ufw enable # 启用防火墙
helmet中间件强制HTTPS跳转。npm audit命令检查项目依赖中的已知漏洞,或通过Snyk工具进行深度扫描(支持GitHub集成)。示例:npm audit fix # 自动修复可修复的漏洞
npm update更新项目依赖,避免使用存在安全漏洞的旧版本库。express-validator等中间件实现自动化验证。ejs模板引擎的<%- %>标签自动转义。helmet中间件设置CSP头,限制页面可加载的资源域名(如脚本、样式、图片),减少XSS攻击风险。示例:const helmet = require('helmet');
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "trusted.cdn.com"]
}
}));
.env文件)存储敏感信息(数据库密码、API密钥),而非硬编码在代码中。通过dotenv库加载环境变量:require('dotenv').config();
const dbPassword = process.env.DB_PASSWORD;
winston或bunyan库),记录请求详情、错误信息及系统活动,便于后续审计和异常排查。express-rate-limit中间件限制客户端请求频率(如每分钟最多100次),防止DDoS攻击或暴力破解。示例:const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });
app.use(limiter);
cors中间件限制允许访问API的域名(如仅允许https://yourdomain.com),避免跨域攻击。示例:const cors = require('cors');
app.use(cors({ origin: 'https://yourdomain.com', credentials: true }));