XML 外部實體注入 XML External Entity Injection

    XML提供了兩種文件的驗證機制,一個是DTD,另一個則是XML Schema,其中DTD可能包含外部實體注入的漏洞。

    DTD(Document Type Definition,文件類型定義),用來訂出文件的元素架構,DTD可以宣告

    • 元素(Elements)
    • 屬性(Attribute)
    • 實體(Entities)
    • 注釋(Comments)

    其中的實體即為外部實體注入漏洞的實體。

    實體的宣告方式如下:<!ENTITY 實體名稱 實體內容>

    可將實體視為類似變數的存在,實體名稱即變數名稱,實體內容即變數內容;其中,實體內容除直接賦予值以外亦可使用file://或http://等方式從連結、檔案等取得變數內容。

    因此,在有讓使用者上傳XML功能的網站中,XML外部實體有可能被寫入惡意連結,使伺服器解析連結後訪問外部網站的惡意連結;亦或是使用file://搭配目錄遍歷讀取並顯示伺服器的私密資料。

    為預防外部實體注入攻擊,在沒必要使用的狀況下應禁止解析外部實體。