溫馨提示×

Linux 環境下 Node.js 如何進行安全加固

小樊
38
2025-10-05 22:20:47
欄目: 編程語言

1. 系統級基礎安全加固

  • 更新系統與軟件包:定期運行sudo apt update && sudo apt upgrade,確保Linux內核、Node.js及依賴庫為最新版本,修補已知安全漏洞。
  • 使用非root用戶運行:創建專用用戶(如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應用層安全配置

  • 使用HTTPS加密傳輸:通過Let’s Encrypt獲取免費SSL證書(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注入攻擊。
  • 設置安全HTTP頭:通過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管理Node.js版本:通過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.jsonyarn.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-----),防止未授權訪問。
  • 使用日志庫:采用WinstonBunyan等結構化日志庫,記錄請求詳情(如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),權限設為750drwxr-x---),防止其他用戶修改代碼;將敏感目錄(如/etc、/root)的權限設為700,限制訪問。
  • 禁用不必要的模塊:通過package.jsonoptionalDependencies移除未使用的模塊,或使用npm prune刪除未在package.json中聲明的依賴,減少攻擊面。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女