溫馨提示×

Node.js如何在Linux上實現安全防護

小樊
45
2025-10-01 16:16:16
欄目: 編程語言

1. 系統基礎防護

  • 內核與系統加固:修改/etc/sysctl.conf文件強化內核防護,啟用地址空間布局隨機化(kernel.randomize_va_space=2,防止內存攻擊)、防御SYN Flood攻擊(net.ipv4.tcp_syncookies=1,避免大量半連接耗盡資源),并通過sysctl -p使配置生效。
  • 服務精簡策略:定期通過netstat -tulnpss -tulnp掃描開放端口,僅保留必要服務(如SSH 22、HTTP 80、HTTPS 443);關閉不必要的系統服務(如Telnet、FTP),減少攻擊面。

2. Node.js應用安全加固

  • 依賴管理:使用npm audit定期檢查項目依賴中的已知漏洞,npm outdated查看過時依賴并及時更新;引入Snyk等第三方工具監控依賴安全,修復高危漏洞(如npm audit fix --force修復可自動修復的問題)。
  • 安全編碼實踐:避免使用eval()、new Function()等動態執行代碼的方法(易引發遠程代碼執行);嚴格驗證和過濾用戶輸入(如使用express-validator校驗表單數據、DOMPurify凈化HTML內容),防止SQL注入、XSS攻擊;對輸出數據進行轉義(如使用ejs模板引擎的<%- %>語法自動轉義),避免惡意腳本執行。
  • 避免Root運行:創建專用普通用戶(如nodeuser),通過chown -R nodeuser:nodeuser /app修改應用目錄權限,使用sudo -u nodeuser node app.js啟動應用,限制進程對系統資源的訪問權限。

3. 網絡安全配置

  • 防火墻設置:使用ufw(Uncomplicated Firewall)配置簡單防火墻規則,僅允許必要端口對外開放(如sudo ufw allow 22/tcp允許SSH登錄、sudo ufw allow 80/tcp允許HTTP、sudo ufw allow 443/tcp允許HTTPS),然后啟用防火墻(sudo ufw enable);若需更細粒度控制,可使用iptables設置規則(如限制單個IP的連接數)。
  • HTTPS加密:通過Let’s Encrypt獲取免費SSL證書(sudo certbot certonly --standalone -d yourdomain.com),配置Nginx或Apache反向代理,將HTTP請求轉發至Node.js的HTTPS端口(443);或在Node.js中直接使用https模塊(需指定證書路徑),強制客戶端通過HTTPS訪問。
  • CORS與CSRF防護:使用cors中間件配置跨域資源共享(如app.use(cors({ origin: 'https://yourdomain.com', methods: ['GET', 'POST'] }))),限制允許的源、方法和頭部;使用csurf中間件防范CSRF攻擊(如app.use(csrf({ cookie: true }))),要求客戶端提交CSRF Token。

4. 敏感信息管理

  • 環境變量存儲:使用dotenv庫加載.env文件中的環境變量(如DB_PASSWORD=yourpassword),在代碼中通過process.env.DB_PASSWORD讀取敏感信息,避免將密碼、API密鑰等硬編碼在代碼中;將.env文件添加到.gitignore,防止誤提交至版本控制系統。
  • 加密敏感數據:用戶密碼不要明文存儲,使用bcrypt庫進行哈希加密(如const hash = await bcrypt.hash(password, 10)),驗證時使用bcrypt.compare比較哈希值;敏感數據(如信用卡信息)可使用AES-256加密(如crypto模塊),確保即使數據泄露也無法直接讀取。

5. 監控與日志管理

  • 日志記錄:使用morgan中間件記錄HTTP請求日志(如app.use(morgan('combined'))),或使用winston庫記錄結構化日志(如logger.info('User logged in'));記錄關鍵操作(如登錄、支付、權限變更),便于后續審計。
  • 日志輪轉與清理:使用logrotate工具配置日志輪轉(如/etc/logrotate.d/nodeapp中設置/var/log/nodeapp/*.log { daily rotate 7 compress missingok }),每天輪轉日志文件,保留7天壓縮日志,避免日志文件過大占用磁盤空間。
  • 實時監控與告警:使用pm2進程管理工具監控應用狀態(如pm2 monit查看CPU、內存使用率),設置告警規則(如內存超過80%時發送郵件);使用fail2ban監控SSH登錄日志,自動封禁多次嘗試失敗的IP地址。

6. 進程與權限控制

  • 使用進程管理工具:使用pm2啟動應用(如pm2 start app.js --name "myapp"),實現進程守護(崩潰后自動重啟)、負載均衡(多實例運行)、日志管理(集中存儲);通過pm2 save保存進程列表,pm2 startup設置開機自啟。
  • 應用級權限限制:使用AppArmorSELinux限制Node.js進程的權限(如AppArmor配置文件/etc/apparmor.d/usr.bin.node中限制進程只能訪問/app目錄和/tmp目錄),防止進程越權訪問系統文件;避免將應用目錄設置為777權限,使用chmod 750限制訪問。

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