系统基础防护
/etc/sysctl.conf文件强化内核防护,关键配置包括启用地址空间布局随机化(kernel.randomize_va_space=2,防止内存攻击)、防御SYN Flood攻击(net.ipv4.tcp_syncookies=1,避免半连接耗尽)。定期扫描开放端口,仅保留必要服务(如SSH 22、HTTP 80、HTTPS 443),并对服务进行最小权限配置。passwd -l锁定无登录需求的账户),限制登录尝试次数(通过PAM模块配置,防止暴力破解)。避免以root权限运行Node.js进程,始终使用普通用户启动应用,降低权限滥用风险。依赖管理
npm audit(内置工具,检测项目依赖中的已知漏洞)、Snyk(第三方工具,提供更全面的安全分析)定期检查依赖项。及时更新依赖至最新版本(npm update),或在package.json中固定依赖版本(使用package-lock.json或yarn.lock),避免引入有漏洞的库。curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -)安装Node.js,确保获取官方维护的最新版本。使用nvm(Node Version Manager)管理多版本Node.js,避免系统级权限问题和版本冲突。网络安全配置
iptables或ufw(Ubuntu简化工具)配置防火墙,仅允许必要端口(如22、80、443)的访问。例如,sudo ufw allow 22/tcp(SSH)、sudo ufw allow 443/tcp(HTTPS),并启用防火墙(sudo ufw enable)。对于生产环境,建议使用云服务商的安全组功能,进一步细化访问控制。ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;)。强制所有流量通过HTTPS(如Express中间件app.use(require('helmet')().hsts({ maxAge: 31536000, includeSubDomains: true, preload: true }))),防止中间人攻击。代码安全最佳实践
express-validator库),防止SQL注入(如参数化查询)、XSS(跨站脚本)等攻击。对所有输出到浏览器的数据进行转义(如使用lodash.escape),避免恶意脚本执行。dotenv库加载.env文件(require('dotenv').config(); const dbPassword = process.env.DB_PASSWORD;)。使用Helmet中间件设置安全HTTP头(如X-Frame-Options: DENY防止点击劫持、X-XSS-Protection: 1; mode=block启用XSS过滤器、Content-Security-Policy: default-src 'self'限制资源加载),提升应用整体安全性。监控与应急响应
logrotate工具定期轮转日志(如按天分割、保留30天),避免日志文件过大占用磁盘空间。实施实时日志监控(如使用Winston+Elasticsearch),设置告警规则(如频繁的401错误、大量POST请求),及时发现异常行为。高级防护技巧
memwatch-next)检测内存泄漏(Memwatch.on('leak', (info) => { console.error('内存泄漏:', info); })),防止内存耗尽导致的服务崩溃。实现运行时请求分析(如createSecurityMiddleware中间件),通过请求模式匹配、上下文验证(如用户权限)、负载安全检查(如JSON Schema验证)拦截恶意请求。对于关键业务,可使用AppArmor(Linux安全模块)限制Node.js进程的权限(如禁止访问/etc/shadow文件),进一步提升运行时安全性。