1. 系统级安全加固
root用户运行Node.js应用,创建专用低权限用户(如nodeuser),并通过chown将应用目录归属该用户;使用chmod限制目录权限(如750),防止未授权访问。sudo apt update && sudo apt upgrade(Ubuntu/CentOS)更新系统内核及软件包,修复基础安全漏洞。ufw(Ubuntu)或firewalld(CentOS)限制端口访问,仅开放必要端口(如22/SSH、80/HTTP、443/HTTPS),默认拒绝其他流量;示例命令:sudo ufw allow 22/tcp && sudo ufw allow 443/tcp && sudo ufw enable。2. Node.js应用自身安全配置
npm audit定期扫描项目依赖,修复已知漏洞;通过package.json固定依赖版本(如"express": "^4.18.2"),避免意外升级引入风险;推荐使用npm ci(而非npm install)在CI/CD中安装依赖,确保一致性。Helmet中间件设置HTTP安全头(如Content-Security-Policy、X-Frame-Options),防范XSS、点击劫持等攻击;示例代码:const helmet = require('helmet'); app.use(helmet())。Joi、express-validator等库定义规则(如body('email').isEmail());过滤特殊字符(如<、>),防止SQL注入、XSS攻击。https模块;启用secure和httpOnly标志的Cookie,防止会话劫持;示例代码:res.cookie('sessionId', 'abc123', { secure: true, httpOnly: true })。3. 进程与服务管理
nvm(Node Version Manager)安装和管理Node.js版本,避免系统级安装的权限问题;通过pm2启动应用并绑定非root用户,示例命令:pm2 start app.js --name "my-app" --user nodeuser。pm2监控应用状态(如CPU、内存占用),设置自动重启(pm2 startup)和日志轮换(pm2-logrotate),防止进程崩溃或日志膨胀。4. 日志与监控
morgan(HTTP请求日志)、winston(结构化日志)记录应用活动,包括请求时间、IP、方法、路径;将日志存储在专用目录(如/var/log/nodejs),设置chmod 640限制访问。Prometheus+Grafana监控服务器性能(CPU、内存、磁盘)和应用指标(请求延迟、错误率);配置Alertmanager在异常(如错误率超过5%)时发送邮件/短信警报。5. 安全审计与持续改进
Snyk、npm audit等工具扫描依赖项,及时修复高危漏洞;将安全扫描集成到CI/CD管道,阻止有漏洞的代码部署。eval()、child_process.exec());使用eslint-plugin-security等ESLint插件识别潜在安全问题。LUKS加密备份介质。