1. 系統級基礎安全加固
sudo apt update && sudo apt upgrade
,確保Linux內核、Node.js及依賴庫為最新版本,修補已知安全漏洞。nodeapp
)及同組,禁止root登錄(passwd -l root
),通過sudo -u nodeapp node app.js
或PM2(--uid nodeapp
)以該用戶啟動應用,限制權限擴散。ufw
限制端口訪問,僅開放必要端口(如HTTP 80、HTTPS 443、SSH 22):sudo ufw allow 22/tcp; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable
。2. Node.js應用層安全配置
sudo certbot --nginx
),配置Nginx反向代理或直接在Node.js中加載證書,強制HTTPS跳轉(res.redirect('https://' + req.headers.host + req.url)
)。Node-restrict
模塊禁止應用訪問child_process
、fs
等高危核心模塊,降低代碼執行或文件系統攻擊風險。express-validator
對用戶輸入(如表單、URL參數)進行格式校驗(如郵箱、手機號正則),使用DOMPurify
清理HTML內容,防止XSS、SQL注入攻擊。Helmet
中間件自動配置安全頭,包括X-Frame-Options: DENY
(防點擊劫持)、X-XSS-Protection: 1; mode=block
(防XSS)、Strict-Transport-Security: max-age=63072000
(強制HTTPS),提升應用防護等級。eval()
、new Function()
等動態代碼執行函數,使用vm2
模塊替代(沙箱環境執行不受信代碼),防止遠程代碼執行(RCE)。express-rate-limit
中間件限制同一IP的請求頻率(如1分鐘內最多10次),防范DDoS、暴力破解攻擊(如密碼猜測)。3. 依賴與版本管理
nvm install 18.16.0
安裝指定版本,nvm use 18.16.0
切換,避免系統默認版本的漏洞,便于版本回滾。npm outdated
查看過時依賴,使用npm update
升級到安全版本;通過npm audit
掃描依賴漏洞,npm audit fix
自動修復可修復問題;使用Snyk
等工具持續監控依賴項的安全狀態(如GitHub Advisory Database)。package.json
中使用固定版本(如"express": "4.18.2"
)而非^
或~
,生成package-lock.json
或yarn.lock
文件,確保團隊協作及部署時依賴一致性,防止意外引入有漏洞的新版本。4. 敏感信息管理
dotenv
庫加載.env
文件(包含DB_PASSWORD
、API_KEY
等),避免在代碼中硬編碼敏感信息;將.env
添加到.gitignore
,防止提交到代碼倉庫。bcrypt
(加鹽哈希)存儲用戶密碼,避免明文保存;使用crypto
模塊(AES-256-GCM)加密數據庫連接字符串、API密鑰等敏感信息,確保即使數據泄露也無法直接讀取。5. 日志與監控
/var/log/my-node-app
),設置所有者為應用用戶(chown nodeapp:nodeapp /var/log/my-node-app
),權限為750
(所有者可讀寫執行,組可讀執行);使用fs.createWriteStream
創建日志文件時,設置mode: 0o640
(-rw-r-----
),防止未授權訪問。Winston
或Bunyan
等結構化日志庫,記錄請求詳情(如IP、方法、路徑)、錯誤信息(如堆棧跟蹤),避免記錄敏感數據(如密碼、銀行卡號);集成New Relic
、Datadog
等監控工具,實時跟蹤應用性能(如響應時間、內存占用)及安全事件(如異常請求)。/etc/logrotate.d/my-node-app
配置文件,設置每日輪轉(daily
)、保留14天(rotate 14
)、壓縮舊日志(compress
),并通過postrotate
腳本通知應用重新打開日志文件(kill -USR1 $(cat /var/run/my-node-app.pid)
),防止日志文件過大占用磁盤空間。6. 進程與權限管理
PM2
管理Node.js進程,實現自動重啟(--watch
監控文件變化)、負載均衡(cluster mode
)、日志管理(--merge-logs
),提升應用穩定性;使用pm2 startup
生成開機自啟腳本,確保服務器重啟后應用自動啟動。/var/www/my-node-app
)的所有者設為應用用戶(chown -R nodeapp:nodeapp /var/www/my-node-app
),權限設為750
(drwxr-x---
),防止其他用戶修改代碼;將敏感目錄(如/etc
、/root
)的權限設為700
,限制訪問。package.json
的optionalDependencies
移除未使用的模塊,或使用npm prune
刪除未在package.json
中聲明的依賴,減少攻擊面。