㈠ 【網路安全】JAVA代碼審計—— XXE外部實體注入
XXE外部實體注入是一種嚴重的安全威脅,當XML解析器解析惡意外部實體時,可能導致文件讀取、命令執行、網路掃描等危害。要防禦這種攻擊,關鍵在於理解XML基礎和其潛在漏洞。
首先,XML基礎包括語法規則,如標簽對大小寫敏感、正確嵌套結構等。實體引用需用HTML實體表示,如使用>代替>。XML文檔需有根元素,屬性值需加引號,空格會被保留。
XML結構中,元素、屬性和實體是核心組成部分。DTD用於規範文檔格式,支持內部聲明和外部引用。PCDATA和CDATA處理方式不同,其中實體分為一般實體和參數實體,可能引發XXE攻擊。
XXE攻擊的具體表現是通過構造惡意外部實體,如在解析XML時載入外部文件,造成安全問題。判斷XXE的方法包括查看HTTP頭中的XML相關字元串,以及觀察XML內容是否被解析。在實際測試中,可能遇到不同環境下的回顯情況,如Blind XXE,需要藉助其他手段傳遞數據。
針對JAVA代碼審計,關鍵在於禁用XML的外部實體解析,這可以通過設置解析器的特性或者升級相關庫(如使用DocumentHelper的2.1.1及以上版本)來實現。在代碼層面,對XMLReader、SAXBuilder、SAXReader等介面的使用要謹慎,務必配置為安全解析模式。