sudo apt update && sudo apt upgrade -y
,确保Debian系统及所有软件包(包括Node.js、npm)为最新版本,修复已知安全漏洞。nodejsUser
),并通过chown -R nodejsUser:nodejsUser /path/to/app
赋予应用目录权限,启动时使用sudo -u nodejsUser node app.js
或进程管理器(如PM2)以该用户运行,避免root权限带来的完全控制风险。curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs
或使用**nvm(Node Version Manager)**管理多版本,避免权限问题:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install 16 nvm use 16 ```。
const helmet = require('helmet'); app.use(helmet()); app.use(helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", "trusted.cdn.com"], styleSrc: ["'self'", "'unsafe-inline'"], imgSrc: ["'self'", "data:"] } })); ```。
express-rate-limit
中间件,限制单个IP在15分钟内的请求次数(如100次),避免恶意流量冲击。示例:const rateLimit = require('express-rate-limit'); const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }); app.use(limiter); ```。
Joi
或express-validator
),过滤特殊字符;输出时使用encodeURIComponent
或模板引擎的自动编码功能,防止SQL注入、XSS攻击。NODE_ENV=production
,避免Express等框架输出堆栈跟踪等敏感信息,防止泄露应用结构。示例:export NODE_ENV=production ```。
npm audit
检查项目依赖中的已知漏洞,运行npm audit fix
自动修复可修复的漏洞;或使用Snyk等第三方工具进行持续监控,及时更新依赖包。package-lock.json
或yarn.lock
锁定依赖版本,避免自动更新引入不安全版本;定期审查package.json
,移除未使用的依赖。ufw
(Uncomplicated Firewall)限制对Node.js应用端口的访问(如3000端口),仅允许必要IP(如运维服务器IP)。示例:sudo ufw allow 22/tcp # SSH sudo ufw allow 3000/tcp # Node.js应用 sudo ufw enable
或使用iptables
设置更细粒度的规则(如限制连接速率)。https
模块)。示例(Nginx配置):server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```。
winston
或morgan
中间件记录请求日志(如URL、IP、状态码),并将日志输出到文件(如/var/log/nodejs/app.log
);避免记录敏感信息(如密码、银行卡号)。npm install pm2 -g pm2 start app.js --name "my-app" pm2 logs my-app # 查看实时日志 pm2 save # 保存当前进程列表 pm2 startup # 设置开机自启 ```。
sudo aa-status # 查看当前AppArmor状态 sudo aa-genprof /usr/bin/node # 为Node.js生成自定义策略
根据提示添加允许的文件路径(如应用目录、日志目录)。node-apex-api-security
等模块对API请求进行HMAC签名,验证请求的完整性和合法性,防止篡改。