簡體   English   中英

如何在解析XML時禁用XInclude?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM