1. 系统与Node.js基础安全配置
sudo apt update && sudo apt upgrade -y(Ubuntu/Debian)或sudo yum update -y(CentOS/RHEL)更新系统;可通过sudo apt install unattended-upgrades开启自动更新,确保系统始终具备最新安全补丁。curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash,加载配置后(source ~/.bashrc),用nvm install --lts安装最新的LTS版本,通过nvm use --lts切换版本。此方式可灵活升级Node.js,减少因版本固定带来的安全风险。deploy)运行应用,限制权限滥用。创建用户:sudo adduser deploy,添加sudo权限:sudo usermod -aG sudo deploy;切换至该用户:su - deploy,再启动应用(如pm2 start app.js)。若使用PM2,可通过pm2 start app.js --uid deploy --gid deploy直接指定用户/组。2. 依赖与代码安全加固
npm audit检查项目依赖中的已知漏洞,npm audit fix自动修复可修复的漏洞;或使用Snyk等第三方工具(npx snyk test)深度扫描依赖树,及时更新有漏洞的依赖包。建议在package.json中固定依赖版本(如"express": "^4.18.2"),并通过package-lock.json或yarn.lock锁定版本,避免意外升级引入风险。express-validator库(如check('username').isLength({ min: 3 }).trim().escape())验证输入格式;或用DOMPurify清理HTML内容(如const cleanHtml = DOMPurify.sanitize(dirtyHtml)),移除恶意脚本标签。eval()、new Function()等动态执行代码的方法(易引发代码注入);限制全局变量使用(如用let/const代替var);避免直接拼接SQL语句(使用ORM如Sequelize或预编译语句);不将敏感信息(如API密钥、数据库密码)硬编码在代码中。3. HTTPS与传输安全
sudo apt install certbot python3-certbot-nginx),配置Nginx反向代理时添加SSL证书路径(如ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;),强制HTTP请求重定向至HTTPS(return 301 https://$host$request_uri;)。若自行搭建服务器,可通过openssl生成自签名证书(sudo openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365),并在Node.js中配置HTTPS服务器(https.createServer({ key, cert }, app).listen(443))。const helmet = require('helmet'); app.use(helmet());;更严格的Content Security Policy(CSP)配置:app.use(helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", "trusted.cdn.com"], objectSrc: ["'none'"] } }));。cors中间件限制允许的源、方法和头部。示例:const cors = require('cors'); app.use(cors({ origin: 'https://yourdomain.com', methods: ['GET', 'POST'], allowedHeaders: ['Content-Type', 'Authorization'] }));,避免使用cors()无限制允许所有跨域请求。4. 系统级安全措施
sudo ufw allow 22/tcp; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable;firewalld配置:sudo firewall-cmd --permanent --add-service=http; sudo firewall-cmd --permanent --add-service=https; sudo firewall-cmd --reload。sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/log/my-node-app(/.*)?"; sudo restorecon -Rv /var/log/my-node-app。通过sudo aa-status检查AppArmor状态(若启用),调整配置文件限制进程访问。logrotate)避免日志文件过大。logrotate配置示例(/etc/logrotate.d/my-node-app):/var/log/my-node-app/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 nodeapp nodeapp sharedscripts postrotate [ -f /var/run/my-node-app.pid ] && kill -USR1 $(cat /var/run/my-node-app.pid) endscript }。使用监控工具(如Prometheus+Grafana、New Relic)实时监控应用性能和安全事件(如异常请求、进程崩溃)。5. 进程与服务管理
sudo npm install -g pm2;启动应用:pm2 start app.js --name "my-app";设置开机自启:pm2 startup(按提示执行命令),并保存当前进程列表:pm2 save。通过pm2 monit监控进程状态,pm2 logs查看实时日志。/var/log/my-node-app),创建专用用户(如nodeapp)和组(nodeapp),设置目录权限为750(所有者可读写执行,组可读执行,其他用户无权限)。创建目录:sudo mkdir -p /var/log/my-node-app;创建用户/组:sudo groupadd nodeapp; sudo useradd -g nodeapp nodeapp -s /bin/false;设置权限:sudo chown nodeapp:nodeapp /var/log/my-node-app; sudo chmod 750 /var/log/my-node-app。若使用PM2,需配置PM2以专用用户运行(pm2 start app.js --uid nodeapp --gid nodeapp),并设置PM2日志目录权限(sudo chown -R nodeapp:nodeapp /home/nodeapp/.pm2)。