OWASP Top 10 實例解析
每年,成千上萬的網頁應用程式因為同樣反覆出現的安全漏洞而遭到入侵。OWASP Top 10 是一份標準的意識文件,列出了網頁應用程式最關鍵的安全風險。在本文中,我們將逐一探討每個風險,展示一個實際範例,並解釋如何緩解它。無論您是開發人員、DevOps 工程師還是安全愛好者,了解這些風險對於建立安全的系統至關重要。
1. 失效的存取控制
當使用者能夠執行超出其預期權限的操作時,就會發生失效的存取控制。例如,使用者可能透過更改 URL 參數來存取其他使用者的資料。
範例:應用程式使用 /api/user/123 來取得使用者資料。如果沒有檢查登入的使用者確實是使用者 123,攻擊者可以將 ID 更改為 /api/user/124 並查看其他人的個人資料。
緩解措施:在伺服器端實作存取控制檢查。預設拒絕。使用角色為基礎的存取控制 (RBAC) 並在每個請求中驗證權限。
2. 加密機制失效
以前稱為「敏感資料外洩」,這個風險涉及未能保護傳輸中或靜態的敏感資料。
範例:以純文字儲存密碼或使用像 MD5 這樣的弱雜湊演算法。
緩解措施:對靜態資料使用強加密(例如 AES-256),對傳輸中的資料使用 TLS 1.2+,並使用強密碼雜湊(bcrypt、Argon2)。
3. 注入
注入漏洞,例如 SQL、NoSQL、OS 和 LDAP 注入,發生在不受信任的資料作為命令或查詢的一部分發送給解譯器時。
範例:一個登入表單建構了如下的 SQL 查詢:
SELECT * FROM users WHERE username = '$username' AND password = '$password';
如果攻擊者輸入 ' OR '1'='1 作為使用者名稱,他們可以繞過身分驗證。
緩解措施:使用參數化查詢或預備語句。跳脫特殊字元並驗證輸入。
4. 不安全的設計
不安全的設計指的是應用程式架構和設計中的缺陷,而不僅僅是實作錯誤。
範例:一個密碼重設功能使用安全性問題,而其答案很容易被猜到。
緩解措施:在設計期間進行威脅建模、使用安全設計模式和參考架構。
5. 安全設定錯誤
這包括預設帳戶、未使用的頁面、未修補的漏洞、未受保護的檔案和目錄。
範例:在 CMS 上保留預設管理員憑證或暴露目錄列表。
緩解措施:強化設定、移除未使用的功能,並自動化設定檢查。
6. 易受攻擊和過時的元件
使用具有已知漏洞的函式庫、框架或軟體。
範例:執行一個帶有已知 XSS 漏洞的舊版 JavaScript 函式庫。
緩解措施:定期更新依賴項,使用像 npm audit 或 OWASP Dependency-Check 這樣的工具,並移除未使用的依賴項。
7. 識別和身分驗證失效
身分驗證和會話管理中的弱點。
範例:允許弱密碼、登入嘗試沒有限制速率,或在 URL 中暴露會話 ID。
緩解措施:實作多重要素驗證、強制執行強密碼原則,並使用安全的會話管理。
8. 軟體和資料完整性失效
程式碼和基礎架構未能防止完整性違規。
範例:使用不受信任的 CDN 來載入指令碼,而沒有子資源完整性 (SRI)。
緩解措施:使用 SRI、驗證簽章,並確保 CI/CD 管道安全。
9. 安全日誌記錄和監控失效
日誌記錄和監控不足會讓攻擊者持續潛伏而不被發現。
範例:沒有記錄失敗的登入嘗試,因此暴力破解攻擊未被注意到。
緩解措施:記錄安全相關事件、監控日誌,並為可疑活動設定警報。
10. 伺服器端請求偽造 (SSRF)
當攻擊者可以讓伺服器向內部資源發出請求時,就會發生 SSRF。
範例:一個 webhook 功能會取得使用者提供的 URL。攻擊者可以提供 http://169.254.169.254/latest/meta-data/ 來存取雲端中介資料。
緩解措施:驗證和清理 URL、使用允許清單,並限制對外流量。
比較表
| 風險 | 範例 | 緩解措施 |
|---|---|---|
| 失效的存取控制 | 透過 IDOR 存取其他使用者的資料 | 伺服器端權限檢查 |
| 加密機制失效 | 以純文字儲存密碼 | 使用強雜湊和 TLS |
| 注入 | 透過登入表單進行 SQL 注入 | 參數化查詢 |
| 不安全的設計 | 弱密碼重設問題 | 威脅建模 |
| 安全設定錯誤 | 預設管理員憑證 | 強化設定 |
| 易受攻擊的元件 | 帶有 XSS 漏洞的舊函式庫 | 定期更新 |
| 身分驗證失效 | 登入沒有限制速率 | MFA 和速率限制 |
| 完整性失效 | 不受信任的 CDN 指令碼 | 子資源完整性 |
| 日誌記錄失效 | 沒有失敗登入的日誌 | 集中式日誌記錄和警報 |
| SSRF | 取得內部中介資料 | URL 允許清單 |
如何開始
- 評估:針對 OWASP Top 10 執行自動化掃描器和手動審查。
- 優先處理:先修復最關鍵的問題(例如注入、失效的存取控制)。
- 培訓:教育開發人員安全編碼實務。
- 監控:為安全事件實作日誌記錄和警報。
- 迭代:定期更新依賴項並重新測試。
常見問題
什麼是 OWASP Top 10?
OWASP Top 10 是由開放網頁應用程式安全計畫 (OWASP) 發布的一份定期更新的清單,列出了網頁應用程式最關鍵的安全風險。
OWASP Top 10 多久更新一次?
它大約每三到四年更新一次,最新版本於 2021 年發布。然而,OWASP 提供持續的指導和更新。
我可以僅依賴 OWASP Top 10 來確保安全嗎?
不行,它只是一個起點。您還應該遵循其他 OWASP 專案,如應用程式安全驗證標準 (ASVS),並進行定期的安全測試。
若要快速分析您的 Nginx 日誌以找出 SQL 注入或 XSS 等攻擊的跡象,請試試我們的 Nginx 日誌分析器。它可以幫助您發現可疑模式並保護您的網頁伺服器。