温馨提示×

Node.js在Linux上的安全配置有哪些要点

小樊
39
2025-10-24 21:25:59
栏目: 编程语言

系统级安全加固

  • 更新系统与Node.js:定期使用包管理器(如apt/yum)更新系统软件包,通过npm audit修复依赖漏洞;优先使用NodeSource仓库或nvm(Node Version Manager)安装指定版本的Node.js,避免使用过时版本。
  • 最小权限原则:避免以root用户运行Node.js应用,创建专用用户(如nodeapp)和组,通过chown设置应用目录及日志文件的所有权(如/var/log/my-node-appnodeapp用户),并通过--uid/--gid参数(如pm2 start app.js --uid nodeapp)让进程以专用用户身份运行。
  • 防火墙配置:使用firewalld(CentOS/RHEL)或ufw(Ubuntu/Debian)限制访问,仅开放Node.js应用必需端口(如HTTP 80、HTTPS 443或自定义业务端口)。例如,firewall-cmd --permanent --zone=public --add-port=3000/tcp添加端口,firewall-cmd --reload生效;若使用iptables,添加-A INPUT -p tcp --dport 3000 -j ACCEPT规则并保存。
  • SELinux/AppArmor:启用SELinux(setenforce 1)或AppArmor,限制应用对系统资源的访问。例如,SELinux可通过semanage fcontext调整上下文(如httpd_log_t),restorecon恢复目录上下文;AppArmor通过配置文件(如/etc/apparmor.d/nodeapp)定义进程权限。

应用级安全配置

  • 输入验证与过滤:对所有用户输入(如表单、URL参数)进行严格验证,使用express-validatorDOMPurify等库防止SQL注入、XSS攻击;避免使用eval()new Function()等高危函数。
  • HTTPS加密与安全头:使用Let’s Encrypt免费证书启用HTTPS(通过certbot自动化配置),禁用HTTP;通过helmet中间件设置安全HTTP头(如X-Frame-Options: DENY防点击劫持、X-XSS-Protection: 1; mode=block防XSS、Content-Security-Policy: default-src 'self'限资源加载)。
  • 敏感信息管理:使用dotenv库将敏感信息(如数据库密码、API密钥)存储在.env文件中,避免硬编码在代码库;确保.env文件不被提交到版本控制系统(如Git,通过.gitignore排除)。
  • 依赖安全:定期运行npm audit检查依赖项中的已知漏洞,使用npm outdated更新过时依赖;集成Snyk、Trivy等工具监控依赖安全,及时修复高风险漏洞。

日志与监控

  • 日志权限与轮转:将日志存放在专用目录(如/var/log/my-node-app),设置目录权限为750drwxr-x---),日志文件权限为640-rw-r-----);使用logrotate配置日志轮转(如每日轮转、保留14天、压缩旧日志),避免日志文件过大。
  • 监控与审计:使用pm2的监控功能(pm2 monit)跟踪应用性能;集成Prometheus+Grafana监控系统指标(如CPU、内存、请求量);通过auditd记录系统日志,监控可疑活动(如频繁的登录失败尝试)。

其他安全措施

  • 限制请求频率:使用express-rate-limit中间件限制同一IP的请求频率(如每分钟60次),防止DoS攻击或暴力破解。
  • 代码安全实践:避免直接输出用户输入(如res.send(userInput)),使用Joi等库验证输入格式;定期进行代码审查,识别潜在的安全漏洞(如未过滤的用户输入)。

0