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签名,验证请求的完整性和合法性,防止篡改。