各框架對策
Express(Node.js)的資安對策 — 防禦要『自己補上』
Express 是最小主義的框架,預設幾乎什麼都不替你守。所以防禦要『自己補上』——安全性標頭、輸入驗證、授權(別停在驗證)、速率限制,以及相依套件(npm)的 CVE 監控。以防禦視角講解該補什麼、怎麼補,不含攻擊步驟。
對象:正在 Express(Node.js)上維運 API 或應用程式的人。這裡不談攻擊步驟,只講要替最小框架『自己補上』的防禦。想看全貌,請參閱 各框架資安對策的入口。
要『自己補上』的防禦(不在預設裡的領域)
Express 只提供路由與中介層的地基。以下這些防禦你不補上就不存在。
安全性標頭
CSP/HSTS/X-Content-Type 等。以 helmet 相當中介層加上。
輸入驗證
未驗證的輸入是 SQLi/XSS/注入的入口。
授權(擁有者範圍)
只停在驗證,換個 ID 就能看到他人的資料(IDOR)。
速率限制
抑制登入暴力破解、API 濫用與 DoS。
相依套件(npm)CVE
對大量相依套件的已知漏洞做機器監控+迅速修補。
機密與 SSRF
機密放環境變數、不混進程式碼/對外抓取 URL 做 SSRF 防護。
補起來的方法(最起碼的五點)
加上安全性標頭
驗證並淨化所有輸入
別只驗證、要寫授權
速率限制與相依套件 CVE 監控
常見(危險)
- 不加標頭的素回應
- 未驗證就把輸入交給資料庫/HTML
- 不寫授權——「已登入=允許」
- 沒有速率限制、放任相依套件 CVE
正確
- 以 helmet 相當中介層加上標頭
- 輸入經過驗證與淨化
- 擁有者範圍的授權
- 速率限制+相依套件 CVE 監控+迅速修補
本站的觀點:最小框架是『自由與責任』成套
Express 的好處是輕巧與自由,但那意味著防禦也要自己設計。本站是不同的技術棧,但 Node 系要守的重點相同——加上標頭、驗證輸入、在公開入口一定要寫授權、每次部署前對相依套件做 CVE 稽核。尤其 Node 的相依套件數量龐大,相依套件的新鮮度決定事故的成敗。丟掉「框架會替我守」的假設,把防禦明確地補上去,才是使用 Express 的正確方式。
接下來讀
- 入口:各框架資安對策(入口) · Next.js 資安對策(同為 Node 系)
- 實務:監控相依套件的 CVE · 工具:安全性標頭檢測
- 名詞:IDOR 是什麼 · SSRF 是什麼
FAQ
QExpress 是安全的框架嗎?
Express 的設計是『最小主義』,只提供路由與中介層的地基,幾乎不內建資安功能。也就是說它既不安全也不危險,防禦是要開發者自己補上的前提。與 Rails、Laravel 這類預設就替你守住很多的框架不同,標頭、輸入驗證、授權、速率限制都得自己組進去。自由度越高,責任也越在自己身上。
Q需要像 helmet 那樣的安全性標頭嗎?
需要。Express 預設不會加上資安相關的 HTTP 標頭。請用 helmet 相當的中介層加上 CSP、HSTS、X-Content-Type-Options 等,降低點擊劫持、MIME 探測等基本風險。光是加上去就能墊高底線,因此值得最先放進去。
Q最起碼要做什麼?
(1) 加上安全性標頭(helmet 相當);(2) 驗證並淨化所有輸入;(3) 別停在登入(驗證)——寫出擁有者範圍的授權;(4) 對登入與 API 加上速率限制;(5) 用機器監控相依套件(npm)的 CVE 並迅速修補。這五點就能補起最小框架的大半破口。