1. 系統基礎防護
/etc/sysctl.conf
文件強化內核防護,啟用地址空間布局隨機化(kernel.randomize_va_space=2
,防止內存攻擊)、防御SYN Flood攻擊(net.ipv4.tcp_syncookies=1
,避免大量半連接耗盡資源),并通過sysctl -p
使配置生效。netstat -tulnp
或ss -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
模板引擎的<%- %>
語法自動轉義),避免惡意腳本執行。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的連接數)。Let’s Encrypt
獲取免費SSL證書(sudo certbot certonly --standalone -d yourdomain.com
),配置Nginx或Apache反向代理,將HTTP請求轉發至Node.js的HTTPS端口(443);或在Node.js中直接使用https
模塊(需指定證書路徑),強制客戶端通過HTTPS訪問。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
設置開機自啟。AppArmor
或SELinux
限制Node.js進程的權限(如AppArmor
配置文件/etc/apparmor.d/usr.bin.node
中限制進程只能訪問/app
目錄和/tmp
目錄),防止進程越權訪問系統文件;避免將應用目錄設置為777
權限,使用chmod 750
限制訪問。