1. 系统账户与权限控制
passwd -l username命令批量锁定),减少潜在攻击面。nodeuser)运行应用,通过chown -R nodeuser:nodeuser /path/to/app设置应用目录权限,限制攻击者获取系统级权限。/etc/pam.d/login添加auth required pam_tally2.so deny=5 unlock_time=300限制登录尝试次数(5次失败后锁定300秒);修改/etc/profile设置TMOUT=300(无操作300秒后自动断开),防范暴力破解。2. 系统与Node.js版本管理
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -添加NodeSource仓库,再用sudo apt install nodejs安装指定版本(如20.x),避免默认仓库版本过旧。curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash安装nvm,用nvm install 20安装指定版本,nvm use 20切换版本,便于版本升级和隔离。npm install -g npm升级npm至最新版;运行npm audit扫描项目依赖漏洞,用npm audit fix自动修复;或用snyk test(npm install -g snyk)检测更深层漏洞。3. 网络与传输安全
ufw(Ubuntu)或iptables限制端口访问,仅开放必要端口(如HTTP 80、HTTPS 443):sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw enable。sudo certbot --nginx -d yourdomain.com),配置Nginx反向代理将HTTP请求转发至HTTPS;或在Node.js中用https模块加载证书(const https = require('https'); const fs = require('fs'); https.createServer({key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem')}, app).listen(443))。helmet中间件(npm install helmet)设置HTTP安全头,如Strict-Transport-Security(强制HTTPS)、X-Frame-Options(防点击劫持)、X-XSS-Protection(防XSS),通过app.use(helmet())启用。4. 依赖与代码安全
npm audit检查项目依赖中的已知漏洞(如npm audit输出“found 5 vulnerabilities”),用npm audit fix自动修复可修复漏洞;或用snyk(snyk test)检测更深层漏洞(如供应链攻击)。express-validator(npm install express-validator)检查输入格式(如邮箱、手机号),用dompurify(npm install dompurify)过滤HTML内容,防止SQL注入、XSS攻击。dotenv(npm install dotenv)管理环境变量,将数据库密码、API密钥等敏感信息存入.env文件(如DB_PASSWORD=yourpassword),通过require('dotenv').config()加载,避免硬编码在代码中。5. 应用层安全防护
express-rate-limit(npm install express-rate-limit)限制请求频率,防止DoS攻击,如const limiter = rateLimit({windowMs: 15*60*1000, max: 100}); app.use(limiter)(15分钟内最多100次请求)。cors中间件(npm install cors)限制跨域请求,仅允许可信域名访问,如app.use(cors({origin: 'https://yourdomain.com', methods: ['GET', 'POST']}))。csurf中间件(npm install csurf)生成CSRF令牌,验证表单提交的合法性,如const csrfProtection = csurf({cookie: true}); app.use(csrfProtection);,并在表单中添加<input type="hidden" name="_csrf" value="<%= csrfToken %>">。app.use((err, req, res, next) => { res.status(500).send('Internal Server Error'); })),防止敏感信息泄露。6. 日志与监控
morgan(npm install morgan)记录HTTP请求日志(如app.use(morgan('combined'))),或用bunyan(npm install bunyan)生成结构化日志(如const log = bunyan.createLogger({name: 'myapp'}); log.info('Request received')),便于后续分析。pm2(npm install pm2 -g)管理Node.js进程(如pm2 start app.js),通过pm2 monit监控CPU、内存使用情况;集成第三方监控工具(如New Relic、Datadog),设置异常告警(如CPU使用率超过80%时发送邮件),及时响应安全事件。