sudo apt update && sudo apt upgrade -y更新Ubuntu系统及所有软件包,修补已知安全漏洞;可通过sudo apt install unattended-upgrades配置自动更新,确保系统持续安全。curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash安装nvm后,用nvm install node安装最新稳定版,nvm use node切换版本,确保使用受支持的Node.js版本。npm audit扫描项目依赖项,识别已知安全漏洞并执行npm audit fix自动修复;或集成Snyk等第三方工具,提供更全面的漏洞分析和修复建议。package.json中指定依赖的固定版本(如"express": "4.18.2"),并使用package-lock.json(或yarn.lock)锁定依赖树,避免意外升级引入不安全版本。deploy)并赋予最小权限,通过sudo chown -R deploy:deploy /path/to/app设置应用目录所有权,用sudo -u deploy node app.js启动应用,限制安全漏洞时的损害范围。const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/example.com/fullchain.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Secure connection established');
}).listen(443);
避免HTTP传输导致的数据泄露或中间人攻击。const helmet = require('helmet'); app.use(helmet());,它会自动添加X-XSS-Protection、X-Frame-Options等头部。express-validator(Express框架)或DOMPurify(前端/后端通用)验证和清理用户输入,防止SQL注入、XSS等攻击。例如:const { body, validationResult } = require('express-validator');
app.post('/submit', [
body('username').isLength({ min: 3 }).trim().escape(),
body('email').isEmail().normalizeEmail()
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() });
// 处理合法输入
});
避免直接将用户输入插入数据库或渲染到页面。.env文件+dotenv库)存储数据库密码、API密钥等敏感信息,切勿将敏感信息硬编码在代码中。例如:require('dotenv').config();
const dbPassword = process.env.DB_PASSWORD;
生产环境中通过sudo chown root:root .env && sudo chmod 600 .env限制.env文件的访问权限。eval()、new Function()等可执行动态代码的函数,防止代码注入攻击;限制child_process模块的使用(如exec、spawn),避免命令注入。JSON.parse),需验证数据来源和完整性,避免恶意数据篡改。例如,使用JWT时设置签名密钥,确保令牌未被篡改。winston或bunyan等日志库记录应用活动(如登录尝试、API调用、错误信息),日志需包含时间戳、用户ID、请求路径等关键信息,便于后续审计。例如:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [new winston.transports.File({ filename: 'security.log' })]
});
logger.info('User logged in', { userId: 123, ip: '192.168.1.1' });
/etc、/var/log等敏感目录),防止进程越权。例如:sudo aa-status查看当前AppArmor状态,编辑/etc/apparmor.d/usr.bin.node定制规则。req.query流向db.query的SQL注入路径;悟空支持Ubuntu环境部署,检测JS代码中的安全缺陷。