本篇是 Web 安全的總覽;常見漏洞(XSS、CSRF、SQL Injection、CORS)的深入見同分類其他筆記。認證/加密見 認證與授權、Hash 與加密。
目錄
- 什麼是 OWASP Top 10?
- A01 失效的存取控制
- A02 加密失效
- A03 注入
- A04 不安全的設計
- A05 安全設定缺失
- A06 易受攻擊與過時的元件
- A07 識別與認證失效
- A08 軟體與資料完整性失效
- A09 安全記錄與監控失效
- A10 伺服器端請求偽造(SSRF)
- 怎麼使用這份清單
- 常見問題
- 總結
什麼是 OWASP Top 10?
OWASP(Open Worldwide Application Security Project) 是一個非營利的應用安全社群。OWASP Top 10 是它定期發布的「Web 應用最關鍵的十大安全風險」清單,是業界最廣為引用的資安基準。
- 每隔數年更新一次(本篇以廣為使用的 2021 版 為準)
- 它是風險「類別」,不是單一漏洞——例如「注入」涵蓋 SQL Injection、指令注入等
- 用途:當作檢查清單與優先排序依據,先顧最常見、最高風險的問題
重點認知:安全是面不是點。Top 10 幫你確保沒漏掉最常見的攻擊面,但不等於「做完這 10 項就安全」。
A01 失效的存取控制
Broken Access Control — 使用者能存取不該存取的資源或操作。2021 版躍升第一,最普遍。
範例:把 /orders/123 改成 /orders/124 就看到別人的訂單(IDOR)
一般使用者直接打 /admin API 就能用管理功能(缺權限檢查)
- 防護:後端每個請求都驗權限(別只靠前端隱藏按鈕);預設拒絕(deny by default);用伺服器端 session/角色判斷,不信任前端傳來的身分
- 相關:資料庫層的 Row Level Security
A02 加密失效
Cryptographic Failures — 敏感資料未加密、或用了弱/錯誤的加密。
範例:密碼用 MD5 存、傳輸沒上 HTTPS、把金鑰寫死在程式碼
- 防護:傳輸用 TLS、密碼用 bcrypt/argon2 雜湊(非 MD5/SHA1)、敏感資料靜態加密、金鑰妥善管理
- 深入:Hash 與加密技術、AES 模式、SSL/TLS 憑證
A03 注入
Injection — 把不可信輸入當成指令/查詢的一部分執行。涵蓋 SQL Injection、指令注入、以及 XSS(跨站腳本)。
-- SQL Injection:輸入 ' OR '1'='1 繞過登入
SELECT * FROM users WHERE name = '' OR '1'='1';
- 防護:參數化查詢 / prepared statement(別字串拼接 SQL)、輸入驗證、輸出時做對應情境的編碼(HTML escape 防 XSS)
- 深入:SQL Injection、XSS(同分類深入篇);參數化查詢也見 UPSERT/索引 等 DB 筆記的範例
A04 不安全的設計
Insecure Design — 問題出在設計階段就缺乏安全考量,不是實作 bug。
範例:沒設計帳號鎖定 → 任人暴力破解;沒設計額度限制 → 被濫用
- 防護:威脅建模(threat modeling)、安全需求納入設計、用安全的設計模式;這類問題事後補很難,要前置
A05 安全設定缺失
Security Misconfiguration — 設定不當留下破口。
範例:開著預設帳密、開放不必要的埠/功能、詳細錯誤訊息洩漏堆疊、雲端儲存桶設成公開
- 防護:最小化原則(關掉用不到的功能)、移除預設帳號、統一安全基線、正式環境關閉除錯/詳細錯誤、定期稽核設定
A06 易受攻擊與過時的元件
Vulnerable and Outdated Components — 用了有已知漏洞的函式庫/框架/系統。
範例:某 npm 套件有 CVE 卻沒更新、用已停止維護的舊版框架
- 防護:盤點相依(SBOM)、定期更新、用
npm audit等掃描工具、移除沒用到的相依 - 相關:npm 完全指南 的安全漏洞修復
A07 識別與認證失效
Identification and Authentication Failures — 認證機制不夠強固。
範例:允許弱密碼、沒有防暴力破解、session token 可預測/不過期、沒有 MFA
- 防護:強密碼策略、限制嘗試次數、安全的 session 管理、考慮 MFA/passkey;JWT 要驗簽章與過期
- 深入:認證與授權完全指南
A08 軟體與資料完整性失效
Software and Data Integrity Failures — 未驗證來源/完整性就信任程式碼或資料。
範例:CI/CD 載入未驗證的第三方腳本、自動更新沒驗簽章、反序列化不可信資料
- 防護:驗證套件/更新的數位簽章、鎖定相依版本(lockfile)、CI/CD 管線加固、避免不安全的反序列化
A09 安全記錄與監控失效
Security Logging and Monitoring Failures — 出事了卻不知道、或事後查不到。
範例:登入失敗/權限變更沒記錄、沒有告警、被入侵數月才發現
- 防護:記錄關鍵安全事件(登入、授權、交易)、集中化日誌與告警、定期演練;但別把敏感資料寫進日誌
- 相關:Fluentd 日誌收集、OS 效能監控
A10 伺服器端請求偽造(SSRF)
Server-Side Request Forgery — 誘使伺服器去請求攻擊者指定的內部位址。
範例:圖片代理功能傳入 http://169.254.169.254/... → 讀到雲端 metadata(含憑證)
- 防護:對使用者提供的 URL 做白名單、禁止存取內網/metadata 位址、關閉不必要的重導與協定
怎麼使用這份清單
- 當檢查清單:開發/上線前逐項對照,先處理最常見的 A01/A03
- 排優先序:依風險(可能性 × 衝擊)排,不必一次全做
- 融入流程:設計階段做威脅建模(防 A04)、CI 加套件掃描(防 A06/A08)、上線後監控(A09)
- 不是終點:Top 10 是「最低標」,高風險系統需更深入的滲透測試與安全審查
常見問題
問題 1:OWASP Top 10 是漏洞清單嗎?
是風險類別清單,不是單一漏洞。例如「A03 注入」涵蓋 SQL Injection、指令注入、XSS 等多種具體攻擊。
問題 2:做完 Top 10 就安全了嗎?
不是。它是最常見、最該優先的十類風險,是「最低標」與起點,不等於完整安全。高風險系統仍需滲透測試、程式碼審查與持續監控。
問題 3:XSS 和 SQL Injection 屬於哪一類?
都屬於 A03 注入——核心問題相同:把不可信輸入當成指令/標記執行。防護共通原則是「不要把輸入直接當程式碼」(參數化、編碼、驗證)。
問題 4:存取控制(A01)為什麼最重要?
它在 2021 版躍升第一,因為最普遍且衝擊大——一個沒檢查權限的端點就可能讓人看到/改到所有人的資料(如 IDOR)。關鍵是每個請求都在後端驗權限。
問題 5:前端做了驗證/隱藏就安全了嗎?
不。前端驗證只為體驗,所有安全檢查必須在後端做——攻擊者能直接打 API、改請求、繞過前端。這是 A01/A03 等問題的共同根源。
總結
核心要點
- OWASP Top 10 是業界最通用的 Web 安全風險清單(風險「類別」非單一漏洞),每數年更新
- 2021 版第一名是 A01 失效的存取控制;A03 注入 涵蓋 SQLi/XSS
- 共通鐵則:後端驗證一切、不信任輸入、不信任前端
- 把它當檢查清單與優先排序起點,而非「做完就安全」的終點
快速參考(2021)
| 編號 | 類別 | 一句話 |
|---|---|---|
| A01 | 失效的存取控制 | 存取到不該存取的(IDOR、缺權限檢查) |
| A02 | 加密失效 | 敏感資料沒加密/用弱加密 |
| A03 | 注入 | 輸入被當指令執行(SQLi、XSS) |
| A04 | 不安全的設計 | 設計階段就缺安全考量 |
| A05 | 安全設定缺失 | 預設帳密、過度開放、錯誤外洩 |
| A06 | 過時元件 | 用有已知漏洞的相依 |
| A07 | 認證失效 | 弱密碼、可暴破、session 不安全 |
| A08 | 完整性失效 | 信任未驗證的程式碼/資料 |
| A09 | 記錄監控失效 | 出事不知道、查不到 |
| A10 | SSRF | 誘使伺服器打內部位址 |
建立日期:2026-06-18