
寫給每個覺得「安全是資安團隊的事」的開發者。
先講結論
資安的核心是一個習慣:寫完每個功能,花 30 秒問自己「這東西可以被怎麼濫用?」 不需要成為專家,但你得知道自己在防什麼。
「安全是他們的事」——最貴的誤解
OWASP 統計,80% 的安全漏洞來自程式碼層面。不是防火牆沒設好,不是伺服器被打穿——是你寫的 code 有洞。
資安團隊做的是審查和監控。漏洞?是你親手寫出來的。等到 code review 才發現要改架構,修復成本是開發階段的 10 倍以上。
所以問題不是「要不要學資安」,而是「你想在開發時花 5 分鐘想,還是上線後花 5 天修」。
CIA Triad——所有安全問題的三個面向
每次設計功能,用這三個維度掃一遍:
- Confidentiality(機密性)——只有該看到的人能看到。密碼明文存、log 印出 API key、.env 推上 GitHub,全是這類問題
- Integrity(完整性)——資料沒有被偷改。訂單金額被竄改、SQL injection,都是完整性被破壞
- Availability(可用性)——需要用的時候用得到。DDoS 打掛、OOM crash、沒有 rate limiting
聽起來很教科書?但你上次設計 API 時,有想過「這個 endpoint 被打 1000 次/秒會怎樣」嗎?
威脅模型——系統化地想「誰會來搞我」
威脅模型不是什麼高深的東西,就是回答四個問題:
1. 我在做什麼? → 系統架構、資料流
2. 什麼東西可能出錯? → 威脅識別
3. 我要怎麼應對? → 對策與優先順序
4. 我做得夠好嗎? → 驗證
業界常用 STRIDE 分類法:Spoofing(偽裝身份)、Tampering(竄改資料)、Repudiation(否認行為)、Information Disclosure(資訊洩漏)、Denial of Service(阻斷服務)、Elevation of Privilege(提權)。
實際做法很簡單:拿出你的系統架構圖,在每個元件和每條資料流上跑一遍 STRIDE。「這裡能被偽裝嗎?資料能被竄改嗎?」——跑完你會發現,平常覺得沒問題的地方其實到處是洞。
縱深防禦——別把雞蛋放在同一道牆後面
外部使用者
│
┌────▼────┐
│ WAF │ ← 第一層:過濾明顯的惡意請求
└────┬────┘
┌────▼────┐
│ API GW │ ← 第二層:認證、Rate Limiting
└────┬────┘
┌────▼────┐
│ App Code │ ← 第三層:Input Validation、權限檢查
└────┬────┘
┌────▼────┐
│ Database │ ← 第四層:Parameterized Query、最小權限
└─────────┘
每一層都假設前一層已經被突破了。不要想「我有 WAF 所以不用管 SQL injection」,而是「即使 WAF 被繞過,我的 code 也不會讓注入得逞」。
同理,最小權限原則:API 服務別用 root 連 DB,Docker 別用 root 跑,CI/CD 別用 admin token。某個元件被攻破時,攻擊者只能在有限範圍內搞事。
安全是風險管理,不是零或一
「反正沒有 100% 安全,所以做了也沒用」——這是最常見的心態陷阱。
正確的思維:風險 = 威脅 × 漏洞 × 影響。你的目標不是零風險,而是識別最大的風險、降低最可能被利用的漏洞、限制被攻擊時的影響範圍。
你的 .env 檔裡有幾個 secret?如果被拿走,能造成多大損害?你的 API 有哪些 endpoint 只檢查了「有沒有登入」但沒檢查「是不是該使用者」?這些才是你該先修的。
資安最大的漏洞不是技術,是那句「應該不會有人攻擊我們吧」。
延伸閱讀
- 紅隊與藍隊 — 從攻防兩個角度深入理解安全
- Web 應用安全實務 — OWASP Top 10 的實際攻擊與防禦手法
- 安全開發生命週期 — 把安全內建到開發流程中