
接續上一篇的需求、設計、開發階段,這篇來看 SDL 的後半段:測試、部署、運維,以及怎麼用 DevSecOps 把這些全部自動化。
先講結論
安全測試工具沒有你想的那麼難設——Semgrep + npm audit + gitleaks,三個都免費,10 分鐘搞定。如果你是個人開發者,每天多花 15 分鐘就能大幅降低被攻擊的風險。
階段四:測試——四種安全測試工具
先搞清楚這四個縮寫在幹嘛:
- SAST(Static Application Security Testing)——掃描原始碼找漏洞。在 CI 裡跑,每次 commit 都掃
- DAST(Dynamic Application Security Testing)——對運行中的應用發送攻擊請求。部署到 staging 後跑
- SCA(Software Composition Analysis)——檢查第三方套件的已知漏洞。在 CI 裡跑
- Secret Scanning——找 code 中硬編碼的 secret。放在 pre-commit hook
聽起來要裝一堆東西?其實推薦的起步組合只有三個,全部免費:
- Semgrep in CI(SAST)——開源,支援多語言,規則可自訂
- npm audit in CI(SCA)——Node.js 內建,一行指令
- gitleaks as pre-commit hook(Secret Scanning)——防止你把 API key commit 進去
DAST 的話,OWASP ZAP 是開源標準,但可以之後再加。先把前三個設好,你就贏過 80% 的專案了。
階段五:部署——一份你應該有的 Checklist
每次部署前跑一遍:
- Debug mode 關了嗎?
- 預設帳號密碼改了嗎?
- HTTPS 強制開啟了嗎?
- Security headers 設了嗎?(去 securityheaders.com 掃一下)
- 不需要的 port 關了嗎?
- Service account 是最小權限嗎?
- Container 是 non-root 跑的嗎?
- Secret 從 secret manager 讀,不是從環境變數硬塞的嗎?
如果你用 Infrastructure as Code,還可以加上自動掃描:tfsec(Terraform)、checkov(多種 IaC)、kube-bench(Kubernetes)。
階段六:運維——持續監控
部署完不是結束。你至少要監控這些安全指標:
- 登入失敗次數——同一 IP 5 分鐘內 > 10 次?可能是暴力破解
- 權限錯誤(403)——同一使用者 1 分鐘內 > 5 次?可能在試權限繞過
- 異常 API 呼叫量——超過 baseline 3 倍?DDoS 或 data scraping
- 新的 admin 帳號建立——任何非預期的建立都該告警
- 大量資料匯出——超過正常量 10 倍?可能是 data exfiltration
DevSecOps——把上面這些全部自動化
整個 pipeline 長這樣:
開發者 push code
│
├── pre-commit: gitleaks(掃 secret)
│
├── CI pipeline:
│ ├── Semgrep(SAST)
│ ├── npm audit(SCA)
│ └── Unit tests with security cases
│
├── Deploy to staging:
│ └── OWASP ZAP scan(DAST)
│
└── Production:
├── Security headers check
├── Runtime monitoring
└── Alerting
核心思維:安全檢查應該是自動的、快速的、不阻礙開發流程的。 如果安全檢查讓 CI 多跑 30 分鐘,開發者會想辦法繞過它。到時候你有跟沒有一樣。
一個人也能做的最小可行 SDL
如果你是個人開發者或小團隊,完整 SDL 太重了。做這五件事就好:
- 寫新功能前——花 5 分鐘想「這功能可以被怎麼濫用?」
- 寫 code 時——記住三條:input validation、parameterized query、最小權限
- commit 前——跑 gitleaks 確保沒有 secret
- CI 裡——加 npm audit 和 semgrep
- 部署後——用 securityheaders.com 掃一次
每天多花 15 分鐘。不做的話?你的 git 歷史裡可能已經有 secret 了——很多人忘記即使在新 commit 裡刪了 .env,舊 commit 裡還在。
安全流程的目的不是讓你開發變慢,是讓你晚上睡得著。雖然 on-call 的時候還是睡不著。
延伸閱讀
- 安全開發生命週期(上):從需求到寫 Code — 本篇的前篇
- 資安基礎概念 — 安全思維的基礎
- 紅隊與藍隊 — 攻防視角
- Web 應用安全實務 — 具體的漏洞與防禦
- 測試策略 — 測試金字塔中安全測試的定位