領先一步
VMware 提供培訓和認證,助您快速提升。
瞭解更多XML 外部實體在釋出 http://pivotal.io/security/cve-2013-6429 時已停用。如果 DTD 未完全停用,則可以使用內聯 DTD 宣告進行拒絕服務攻擊,即所謂的 XML 炸彈。根據 XML 模式規則,此類宣告格式良好且有效,但解析時可能導致記憶體不足錯誤。為防禦此類攻擊,必須透過在 DOM 和 SAX API 中將 disallow-doctype-dec 特性設定為 true,並在 StAX API 中將 supportDTD 屬性設定為 false 來停用 DTD 支援。
現在,只要框架從外部源設定 XML 解析,Spring Framework 就會預設執行此操作。主要包括 spring-oxm
中的 Unmarshaller
實現和 spring-web
中的 HttpMessageConverter
實現。
請注意,在涉及使用 StAX 的應用程式中,可能需要採取進一步的措施。例如,IBM JDK 1.6 和 1.7 除了設定 supportDTD=false 外,還需要一個環境變數(參見 IBM JDK 參考)。此外,我們發現僅設定 supportDTD 並不能防禦所有型別的針對 JDK JAXP 實現的 DoS 攻擊。因此,我們建議使用 Woodstox 開源庫進行 StAX 解析。
以下描述了 Spring Framework 何時使用 StAX
SourceHttpMessageConverter
-- 預設啟用。該轉換器在 3.2 版本中新增,而 StAX 支援在 4.0.1 版本中新增,用於轉換為 javax.xml.transform.stax.StAXSource
型別的 Spring MVC 控制器方法引數時使用。Jaxb2CollectionHttpMessageConverter
-- 預設不啟用。該轉換器在 3.2 版本中新增。MappingJackson2XmlHttpMessageConverter
-- 當類路徑中存在“jackson-dataformat-xml”時啟用。該轉換器在 4.1 版本中新增。受影響的 Spring Framework 版本使用者應按如下方式升級
此外,透過 StAX 從外部源接收 XML 輸入的應用程式也應使用和/或升級到最新版本的 Woodstox 庫,例如 4.2+ 版本(4.2.1 是 Spring IO Platform 中當前精選的版本)。
關於新增 Woodstox 的注意事項
StAX 定義了一種標準機制來選擇在有多個實現可用時使用哪個 StAX 實現,包括系統屬性和 WEB-INF/services 下的服務定義。Woodstox 包含了必要的服務定義,因此簡單地將其新增到類路徑中應該就可以工作。然而,某些應用伺服器(如 WebLogic)已經捆綁了 Woodstox 的(舊版本),在這種情況下,您可能需要配置伺服器以優先使用應用程式選擇的版本,請參閱此 關於 prefer-application-packages 的參考。
該問題由 NTT DATA Corporation 的 Toshiaki Maki 負責任地發現並報告給 Pivotal,他也協助開發和測試瞭解決方案。
2015 年 6 月 30 日:首次釋出漏洞報告。
要報告 Spring 組合專案中存在的安全漏洞,請參閱安全政策