OWASP Top 10 實例解析
您已經建立了一個網頁應用程式,現在擔心安全問題。OWASP Top 10 是關鍵網頁應用程式安全風險的首選清單。但閱讀清單是一回事,理解這些風險如何在真實程式碼中顯現又是另一回事。本文將透過實際範例和具體的緩解步驟,逐一介紹 OWASP Top 10 的每個類別。
1. 存取控制失效
當使用者能夠執行超出其預期權限的操作時,就會發生存取控制失效。例如,使用者可能透過更改 URL 參數來存取另一個使用者的帳戶。
// 易受攻擊:未檢查請求的使用者 ID 是否屬於已驗證的使用者
app.get('/api/user/:id', (req, res) => {
const user = getUserById(req.params.id);
res.json(user);
});
緩解措施:在伺服器端強制執行存取控制檢查。使用角色型或屬性型存取控制,並預設拒絕。
2. 加密機制失效
密碼和信用卡號等敏感資料在傳輸和儲存時都必須加密。使用弱演算法或硬編碼密鑰是常見的陷阱。
# 易受攻擊:使用 MD5 進行密碼雜湊
import hashlib
hash = hashlib.md5(password.encode()).hexdigest()
緩解措施:使用 bcrypt 或 Argon2 等強力、加鹽的雜湊演算法。傳輸中的資料一律使用 HTTPS (TLS)。
3. 注入攻擊
注入漏洞(例如 SQL 注入)發生在將不受信任的資料作為命令或查詢的一部分發送給解釋器時。
// 易受攻擊:在 SQL 查詢中使用字串串接
$sql = "SELECT * FROM users WHERE username = '" . $_GET['username'] . "'";
緩解措施:使用參數化查詢或預備語句。切勿將使用者輸入直接串接到查詢中。
4. 不安全設計
不安全設計指的是控制設計缺失或無效。例如,密碼恢復系統若洩露電子郵件是否存在,可能協助攻擊者。
緩解措施:在設計階段進行威脅建模,使用安全設計模式,並實作速率限制和其他控制措施。
5. 安全設定錯誤
這包括保留預設帳戶啟用、向使用者顯示堆疊追蹤,或錯誤配置雲端儲存權限。
# 易受攻擊:在生產環境中啟用除錯模式
DEBUG = True
緩解措施:強化組態設定、移除未使用的功能,並自動化組態檢查。
6. 易受攻擊和過時的元件
使用含有已知漏洞的程式庫就像把門開著。例如,某個熱門程式庫的過時版本可能存在遠端程式碼執行漏洞。
緩解措施:定期更新相依性、使用 OWASP Dependency-Check 等工具,並監控 CVE。
7. 識別和驗證失效
弱驗證機制允許攻擊者猜測密碼或劫持工作階段。
// 易受攻擊:登入失敗後未鎖定帳戶
if (passwordMatches) {
loginUser();
} else {
// 僅顯示錯誤,沒有速率限制
}
緩解措施:實作多因素驗證、強制執行強密碼原則,並使用安全的工作階段管理。
8. 軟體和資料完整性失效
此類別包括使用不受信任的來源進行軟體更新,或還原序列化不受信任的資料。
// 易受攻擊:還原序列化不受信任的資料
$data = unserialize($_POST['data']);
緩解措施:驗證數位簽章、使用完整性檢查,並避免還原序列化不受信任的資料。
9. 安全日誌記錄和監控失效
沒有適當的日誌記錄,入侵行為就無法被偵測。例如,未能記錄失敗的登入嘗試。
緩解措施:記錄安全相關事件、設定警示,並制定事件回應計畫。
10. 伺服器端請求偽造 (SSRF)
當攻擊者能夠讓伺服器向非預期的位置發送請求時,就會發生 SSRF。
// 易受攻擊:未經驗證就從使用者輸入取得 URL 並發送請求
fetch(req.query.url).then(...)
緩解措施:驗證和清理 URL、使用允許清單,並限制伺服器權限。
比較表
| 風險 | 範例 | 緩解措施 |
|---|---|---|
| 存取控制失效 | 透過 URL 操作存取其他使用者的資料 | 強制執行伺服器端存取檢查 |
| 加密機制失效 | 以純文字儲存密碼 | 使用強力雜湊和 TLS |
| 注入攻擊 | 透過未清理的輸入進行 SQL 注入 | 參數化查詢 |
| 不安全設計 | 密碼恢復洩露電子郵件是否存在 | 威脅建模和安全模式 |
| 安全設定錯誤 | 生產環境中開啟除錯模式 | 強化組態設定 |
| 易受攻擊的元件 | 含有已知 CVE 的過時程式庫 | 定期更新和相依性檢查 |
| 驗證失效 | 登入沒有速率限制 | 多因素驗證和強密碼原則 |
| 完整性失效 | 還原序列化不受信任的資料 | 驗證簽章並避免不安全的還原序列化 |
| 日誌記錄失效 | 登入失敗沒有日誌 | 實作日誌記錄和監控 |
| SSRF | 取得使用者提供的 URL | 驗證並允許清單 URL |
常見問題
什麼是 OWASP Top 10?
OWASP Top 10 是由開放網頁應用程式安全專案 (OWASP) 發布的定期更新清單,列出最關鍵的網頁應用程式安全風險。
OWASP Top 10 多久更新一次?
它會定期更新以反映新興威脅和技術變化。上一次重大更新是在 2021 年。
OWASP Top 10 足以確保安全嗎?
不夠,它只是一個起點。全面的安全計畫包括安全程式碼撰寫實務、定期測試和持續監控。
為了進一步保護您的應用程式,可以考慮使用 Nginx 日誌分析器 等工具來監控和偵測伺服器日誌中的可疑活動。