1. 系统级安全加固
sudo apt update && sudo apt upgrade(Ubuntu/CentOS)更新系统包,使用npm install -g npm升级npm至最新版本,确保系统及Node.js本身的安全漏洞被修复。nodejsUser),并通过chown -R nodejsUser:nodejsUser /path/to/app设置应用目录权限,启动时使用sudo -u nodejsUser node app.js或通过PM2(pm2 start app.js --user nodejsUser)以该用户运行,避免权限过高导致入侵后完全控制服务器。ufw(Ubuntu)或firewalld(CentOS)限制访问,仅开放必要端口(如HTTPS的443端口、应用端口)。例如,sudo ufw allow 443/tcp && sudo ufw enable,阻止非法IP访问。2. Node.js应用层安全配置
app.use(helmet())自动配置X-Frame-Options(防点击劫持)、X-XSS-Protection(防XSS)、Content-Security-Policy(内容安全策略)等头部,减少浏览器端攻击面。express-validator(如check('email').isEmail())或DOMPurify(清理HTML)过滤恶意内容,防止SQL注入、XSS、命令注入等攻击。app.use((err, req, res, next) => { res.status(500).send('Internal Server Error'); })捕获错误并返回通用消息,避免泄露服务器路径、数据库结构等敏感信息;使用winston或bunyan记录错误日志,便于后续审计。express-rate-limit中间件限制同一IP的请求频率(如每分钟60次),防止DDoS攻击或暴力破解。例如:const limiter = rateLimit({ windowMs: 60*1000, max: 60 }); app.use(limiter)。3. 依赖与代码安全管理
npm audit检查项目依赖中的已知漏洞,npm audit fix自动修复可修复的漏洞;集成Snyk(npm install -g snyk && snyk test)实现持续监控,及时获取漏洞预警。package.json中使用固定版本(如"express": "4.18.2")而非^或~,并通过npm shrinkwrap或package-lock.json(npm v7+)锁定依赖树,避免意外升级引入漏洞。eval()、new Function()等动态执行代码的方法;使用const/let替代var防止变量提升;限制全局变量使用(如delete global.someVar),减少代码注入风险。4. 网络与数据安全
sudo certbot --nginx -d yourdomain.com),配置Node.js或反向代理(如Nginx)监听443端口,强制加密数据传输;避免明文HTTP传输敏感信息。.env文件配合dotenv库)存储API密钥、数据库密码等敏感信息,避免硬编码在代码中;使用bcrypt或scrypt对用户密码进行哈希处理,不要明文存储。Passport.js或jsonwebtoken(JWT)实现用户认证,支持多因素认证(MFA);通过RBAC(基于角色的访问控制)限制用户权限(如admin、user角色),防止越权访问。5. 监控与运维安全
PM2(npm install -g pm2)管理Node.js进程,实现自动重启(pm2 startup)、日志管理(pm2 logs)、负载均衡(pm2 scale app 4),提高应用可用性。Prometheus+Grafana监控应用性能(CPU、内存、请求延迟),设置告警规则(如CPU使用率超过80%时发送邮件),及时发现异常。OpenVAS、Nessus等工具定期扫描系统漏洞;审查应用代码(如通过SonarQube),检查潜在的安全问题(如硬编码密码、未验证输入);定期演练应急响应流程(如数据泄露、服务器入侵),提高应对能力。