OWASP(Open Web Application Security Project)每隔幾年發布一次 Top 10,列出最常見的 web 應用安全風險。這不是「最嚴重的 10 個漏洞」,而是「在真實環境中最普遍發現的 10 類問題」。
2021 版的排名和 2017 版有明顯變化——Broken Access Control 從第五名升到第一名,反映了雲端和 API 時代的現實。
A01:Broken Access Control(失控的存取權限)
最普遍的問題。用戶能存取他們不應該有權限的資源:
- 修改 URL 的
id參數就能看到別人的資料(IDOR) - 普通用戶呼叫只有 admin 才能用的 API
- 用戶登出後 JWT token 沒有失效,session 可以繼續使用
防禦層次:在 server 端強制執行授權,不要依賴前端隱藏元件。每個 API endpoint 都要有明確的授權檢查,不要預設「有登入就有權限」。
A02:Cryptographic Failures(加密失敗)
傳輸或儲存敏感資料時沒有適當加密,或使用了不安全的加密方式:
- 密碼用 MD5 或 SHA-1 hash(已被破解)
- HTTP 傳輸敏感資料(沒有 HTTPS)
- 資料庫裡的個人資料沒有加密
防禦:密碼用 bcrypt / Argon2,傳輸用 TLS 1.2+,敏感資料加密存儲,不要自己實作加密算法。
A03:Injection(注入攻擊)
攻擊者把惡意指令注入到應用執行的查詢裡:
- SQL Injection:
'; DROP TABLE users; -- - Command Injection:在系統指令裡注入 shell 命令
- LDAP / XPath Injection
防禦:參數化查詢(prepared statements),不要拼接字串建 SQL。使用 ORM 不代表自動安全——原生查詢仍然有注入風險。
A04:Insecure Design(不安全的設計)
安全問題從設計階段就埋下,不是實作 bug:「重設密碼只需要知道生日」「API 沒有 rate limit 可以無限嘗試」。這和 A07(認證失敗)不同——A04 是設計邏輯本身有問題。
防禦:在設計階段做 threat modeling,問「如果攻擊者這樣做會怎樣」。
A05:Security Misconfiguration(安全設定錯誤)
預設設定沒有改、開發用的 debug 模式留在生產環境、雲端儲存 bucket 公開可讀:
- S3 bucket 忘記設 private
- Docker 容器以 root 執行
- 錯誤訊息洩漏 stack trace 給用戶
防禦:CIS Benchmark、自動化設定掃描(Trivy / Prowler)、最小權限原則。
A06:Vulnerable and Outdated Components(有漏洞的第三方套件)
使用含有已知 CVE 的 npm / PyPI / Maven 套件,攻擊者可以利用公開的漏洞。Log4Shell(2021)是最有名的案例。
防禦:定期用 npm audit / Snyk / Dependabot 掃描依賴,有嚴重 CVE 時快速更新。
A07:Identification and Authentication Failures(認證失敗)
帳密可以被暴力破解、沒有 MFA、session token 可預測、允許無限次嘗試登入。
防禦:限制登入嘗試次數、強制 MFA 對敏感操作、session token 用密碼學安全的亂數產生。
A08:Software and Data Integrity Failures(軟體與資料完整性)
CI/CD pipeline 沒有驗證程式碼來源、反序列化不可信的物件、npm package 被投毒:
- 2020 年 SolarWinds 供應鏈攻擊
- 2021 年 ua-parser-js npm 套件被入侵
防禦:程式碼簽名、CI/CD pipeline 存取控制、不反序列化不可信來源的物件。
A09:Security Logging and Monitoring Failures(日誌與監控不足)
攻擊發生了但沒有 log,或者 log 有但沒有人看,或者被攻擊後幾週才發現。
防禦:關鍵操作都要有 log(登入失敗、權限拒絕、資料修改),log 要有 alert,要有 incident response 流程。
A10:Server-Side Request Forgery(SSRF)
攻擊者讓 server 替他發 HTTP request 到內部服務:
# 攻擊者輸入 url 參數
GET /fetch?url=http://169.254.169.254/metadata # AWS metadata endpoint
防禦:驗證和限制 server 能發 request 的目標,不信任用戶提供的 URL,network egress 限制。
這十個類別各自有深度。後端視角的 code 層防禦在 backend/security B16,infrastructure 層的防禦在 infra/security-governance I06。這篇的目標是讓你知道每個類別在說什麼,以及大概在哪個層次防禦。