CSRF、SSRF 和 XXE 是三種不同類型的網絡安全漏洞,它們的原理、攻擊目標、利用方式和危害場景均有顯著區別。以下從核心定義、原理、場景等維度詳細對比三者的差異。
一、核心定義與原理對比
漏洞類型 | 全稱 | 核心定義 | 核心原理 |
CSRF | 跨站請求偽造 | 攻擊者誘導用戶在已登錄的情況下,通過瀏覽器向目標服務器發送惡意請求,冒充用戶執行操作。 | 利用用戶的會話狀態(如 Cookie),讓服務器誤以為請求是用戶主動發起的,從而執行未授權操作。 |
SSRF | 服務器端請求偽造 | 攻擊者通過構造惡意請求,誘導服務器主動向指定目標(內網 / 本地 / 第三方服務)發起請求,竊取信息或攻擊內網。 | 服務器存在未過濾的 “請求轉發” 功能(如從 URL 加載資源),攻擊者控制請求目標,利用服務器權限訪問受限資源。 |
XXE | XML 外部實體注入 | 攻擊者通過構造包含惡意外部實體的 XML 輸入,誘導 XML 解析器加載外部資源,導致文件泄露或內網訪問。 | XML 解析器未禁用外部實體(External Entity),解析包含 定義的 XML 時,會執行外部資源加載(如本地文件、內網 URL)。 |
二、關鍵區別詳解
1. 攻擊主體與發起者不同
- CSRF:攻擊由客戶端(用戶瀏覽器) 發起。攻擊者通過惡意網頁、郵件等誘導用戶訪問,利用用戶的瀏覽器向目標服務器發送請求(用戶此時已登錄,持有合法會話)。
例:用戶登錄網銀后,訪問攻擊者的惡意網站,網站自動發送轉賬請求,網銀服務器因用戶已登錄而執行操作。 - SSRF:攻擊由服務器端發起。攻擊者通過前端輸入(如 URL 參數)構造惡意請求,服務器接收到請求后,會按攻擊者的指令主動向指定目標(如內網 IP、本地服務端口)發起請求,并將結果返回給攻擊者。
例:某網站有 “根據 URL 加載圖片” 功能,攻擊者輸入http://192.168.1.1:3306
(內網 MySQL 端口),服務器會主動訪問該內網地址,攻擊者可通過返回結果探測內網服務。 - XXE:攻擊由XML 解析器觸發。攻擊者向接受 XML 輸入的應用提交包含惡意外部實體的 XML 數據,應用的 XML 解析器在解析時會加載外部實體指向的資源(如本地文件、內網 URL),并將內容返回給攻擊者。
例:某 API 接受 XML 格式數據,攻擊者提交包含<DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
的 XML,解析器會讀取/etc/passwd
并返回內容。
2. 攻擊目標與場景不同
- CSRF:目標是服務器上的用戶權限操作,僅能執行用戶權限范圍內的操作(如轉賬、改密碼、發消息等),無法直接獲取數據,主要危害是 “越權執行操作”。
常見場景:社交平臺自動發動態、電商平臺下單、后臺權限操作等。 - SSRF:目標是服務器可訪問的資源,包括:
- 內網服務(如數據庫、Redis、后臺管理系統);
- 本地服務(如
localhost:8080
的后臺接口); - 第三方服務(如云存儲 API)。
危害:探測內網拓撲、竊取內網數據、攻擊內網服務(如 Redis 未授權訪問)、繞過防火墻等。
- XXE:目標是XML 解析器可訪問的資源,包括:
- 本地文件(如
/etc/passwd
、配置文件); - 內網 URL(如訪問內網 Web 服務、數據庫);
危害:讀取敏感文件、探測內網服務、觸發命令執行(結合其他漏洞時)等。
- 本地文件(如
3. 利用條件不同
- CSRF:
- 用戶需已登錄目標服務器(持有有效會話 Cookie);
- 目標操作可通過 HTTP 請求觸發(如 GET/POST);
- 服務器未驗證請求的真實性(如無 CSRF Token、Referer 檢查)。
- SSRF:
- 服務器存在 “請求轉發” 功能(如從 URL 加載數據、遠程圖片、API 調用);
- 服務器對用戶輸入的目標 URL 未做嚴格過濾(如未禁止內網 IP、
file://
/gopher://
等協議)。
- XXE:
- 應用接受 XML 格式輸入(如 API 接口、文件上傳);
- XML 解析器未禁用外部實體(
ENTITY
)、參數實體(%ENTITY
)或 DTD(文檔類型定義); - 解析結果可能被攻擊者獲取(如錯誤信息泄露、返回內容包含實體數據)。
4. 典型攻擊流程不同
- CSRF 攻擊流程:
- 用戶登錄 A 網站(目標服務器),獲取會話 Cookie;
- 攻擊者誘導用戶訪問惡意網站 B;
- 網站 B 向 A 網站發送惡意請求(如轉賬),請求攜帶用戶的 Cookie;
- A 網站驗證 Cookie 有效,執行請求操作。
- SSRF 攻擊流程:
- 服務器提供 “根據 URL 獲取資源” 功能(如
/fetch?url=xxx
); - 攻擊者構造惡意 URL(如
http://127.0.0.1:6379
,Redis 本地端口); - 服務器接收到請求,按 URL 向目標發起訪問;
- 服務器將訪問結果返回給攻擊者,或因訪問行為導致內網安全問題。
- 服務器提供 “根據 URL 獲取資源” 功能(如
- XXE 攻擊流程:
- 應用接受 XML 輸入(如提交訂單、數據同步);
- 攻擊者提交包含外部實體的 XML(如
<DOCTYPE ... [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
); - XML 解析器加載外部實體,讀取
/etc/passwd
內容; - 解析結果通過響應或錯誤信息泄露給攻擊者。
5. 危害與防御措施不同
漏洞類型 | 主要危害 | 核心防御措施 |
CSRF | 越權執行操作(轉賬、改配置等),無數據竊取能力。 | 1. 添加 CSRF Token 并驗證;2. 檢查 Referer/Origin;3. 關鍵操作需二次驗證(如密碼)。 |
SSRF | 探測內網拓撲、竊取內網數據、攻擊內網服務(如 Redis 未授權)、繞過防火墻。 | 1. 限制請求協議(僅允許 http/https);2. 過濾內網 IP(如 10.0.0.0/8、127.0.0.1);3. 禁用危險協議(gopher、file)。 |
XXE | 讀取本地敏感文件、訪問內網服務、觸發命令執行(間接)。 | 1. 禁用 XML 外部實體(如 libxml2 的 禁用);2. 禁止 DTD 解析;3. 使用安全的 XML 解析庫(如 Python 的 defusedxml)。 |
三、總結:核心差異一句話概括
- CSRF:“借用戶的手,干用戶能做的事”(客戶端冒充用戶操作);
- SSRF:“借服務器的手,訪問服務器能到的地方”(服務器主動訪問惡意目標);
- XXE:“借 XML 解析器的手,讀解析器能讀的資源”(利用 XML 解析加載外部實體)。
三者均屬于注入類或偽造類漏洞,但因攻擊主體、利用場景不同,防御策略和危害范圍也存在顯著差異。