[英]How to disable XInclude when parsing XML?
我已經了解XInclude
是從不受信任的來源接收XML時的潛在漏洞。 請參閱https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java
我期望從外部源獲取的XML非常簡單,並且不需要包含外部XML。
我已嘗試以下方法來禁用XInclude(如備忘單中所推薦):
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);
並使用此XML進行測試
<?xml version="1.0" encoding="utf-8"?>
<data xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="file://d/temp/badxml.xml" parse="xml">
</xi:include>
</data>
外部文件包含無效的XML。
如果setXIncludeAware
設置為true
,我原以為解析器會失敗,但事實並非如此。 該代碼段始終是可解析的。 我使用的是Java 8。
這是一個有效的測試嗎? 這是避免XInclude攻擊的正確方法嗎?
這是避免XInclude和實體攻擊的正確方法,但正如您所發現的那樣,這不是XInclude攻擊的有效測試。
根據這個答案 ,“XInclude支持依賴於名稱空間支持,默認情況下會出於向后兼容性原因而關閉它”。 所以調用dbf.setNamespaceAware(true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.