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。這篇的目標是讓你知道每個類別在說什麼,以及大概在哪個層次防禦。