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:透過回應時間來推測資料庫內容