1. 系统级基础安全加固
sudo apt update && sudo apt upgrade,确保Linux内核、Node.js及依赖库为最新版本,修补已知安全漏洞。nodeapp)及同组,禁止root登录(passwd -l root),通过sudo -u nodeapp node app.js或PM2(--uid nodeapp)以该用户启动应用,限制权限扩散。ufw限制端口访问,仅开放必要端口(如HTTP 80、HTTPS 443、SSH 22):sudo ufw allow 22/tcp; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable。2. Node.js应用层安全配置
sudo certbot --nginx),配置Nginx反向代理或直接在Node.js中加载证书,强制HTTPS跳转(res.redirect('https://' + req.headers.host + req.url))。Node-restrict模块禁止应用访问child_process、fs等高危核心模块,降低代码执行或文件系统攻击风险。express-validator对用户输入(如表单、URL参数)进行格式校验(如邮箱、手机号正则),使用DOMPurify清理HTML内容,防止XSS、SQL注入攻击。Helmet中间件自动配置安全头,包括X-Frame-Options: DENY(防点击劫持)、X-XSS-Protection: 1; mode=block(防XSS)、Strict-Transport-Security: max-age=63072000(强制HTTPS),提升应用防护等级。eval()、new Function()等动态代码执行函数,使用vm2模块替代(沙箱环境执行不受信代码),防止远程代码执行(RCE)。express-rate-limit中间件限制同一IP的请求频率(如1分钟内最多10次),防范DDoS、暴力破解攻击(如密码猜测)。3. 依赖与版本管理
nvm install 18.16.0安装指定版本,nvm use 18.16.0切换,避免系统默认版本的漏洞,便于版本回滚。npm outdated查看过时依赖,使用npm update升级到安全版本;通过npm audit扫描依赖漏洞,npm audit fix自动修复可修复问题;使用Snyk等工具持续监控依赖项的安全状态(如GitHub Advisory Database)。package.json中使用固定版本(如"express": "4.18.2")而非^或~,生成package-lock.json或yarn.lock文件,确保团队协作及部署时依赖一致性,防止意外引入有漏洞的新版本。4. 敏感信息管理
dotenv库加载.env文件(包含DB_PASSWORD、API_KEY等),避免在代码中硬编码敏感信息;将.env添加到.gitignore,防止提交到代码仓库。bcrypt(加盐哈希)存储用户密码,避免明文保存;使用crypto模块(AES-256-GCM)加密数据库连接字符串、API密钥等敏感信息,确保即使数据泄露也无法直接读取。5. 日志与监控
/var/log/my-node-app),设置所有者为应用用户(chown nodeapp:nodeapp /var/log/my-node-app),权限为750(所有者可读写执行,组可读执行);使用fs.createWriteStream创建日志文件时,设置mode: 0o640(-rw-r-----),防止未授权访问。Winston或Bunyan等结构化日志库,记录请求详情(如IP、方法、路径)、错误信息(如堆栈跟踪),避免记录敏感数据(如密码、银行卡号);集成New Relic、Datadog等监控工具,实时跟踪应用性能(如响应时间、内存占用)及安全事件(如异常请求)。/etc/logrotate.d/my-node-app配置文件,设置每日轮转(daily)、保留14天(rotate 14)、压缩旧日志(compress),并通过postrotate脚本通知应用重新打开日志文件(kill -USR1 $(cat /var/run/my-node-app.pid)),防止日志文件过大占用磁盘空间。6. 进程与权限管理
PM2管理Node.js进程,实现自动重启(--watch监控文件变化)、负载均衡(cluster mode)、日志管理(--merge-logs),提升应用稳定性;使用pm2 startup生成开机自启脚本,确保服务器重启后应用自动启动。/var/www/my-node-app)的所有者设为应用用户(chown -R nodeapp:nodeapp /var/www/my-node-app),权限设为750(drwxr-x---),防止其他用户修改代码;将敏感目录(如/etc、/root)的权限设为700,限制访问。package.json的optionalDependencies移除未使用的模块,或使用npm prune删除未在package.json中声明的依赖,减少攻击面。