XDocument.Parse:避免替换XXE引用

时间:2015-10-21 09:13:27

标签: c# xml linq-to-xml xxe

我试图防止我的应用处理的XML中的恶意XXE注入。因此,我使用的是XDocument而不是XmlDocument。

XML表示Web请求的有效负载,因此我在其字符串内容上调用XDocument.Parse。但是,我发现XML(& XXE)中包含的XXE引用在结果中被替换为ENTITY xxe的实际值。

是否可以使用XDocument解析XML而无需替换& xxe?

由于

编辑: 我设法避免使用XmlResolver=null

XDocument.Load替换XML中的xxes

2 个答案:

答案 0 :(得分:0)

而不是Parse尝试将Load与预先配置的阅读器一起使用:

var xdoc = XDocument.Load(new XmlTextReader(
    new StringReader(xmlContent)) { EntityHandling = EntityHandling.ExpandCharEntities });

来自MSDN:

  

当EntityHandling设置为ExpandCharEntities时,阅读器会扩展字符实体并将一般实体作为EntityReference节点返回。

答案 1 :(得分:0)

使用以下示例停止解析XXE(架构和DTD)。

Dim objXmlReader As System.Xml.XmlTextReader = Nothing
objXmlReader = New System.Xml.XmlTextReader(_patternFilePath)
objXmlReader.XmlResolver = Nothing
patternDocument = XDocument.Load(objXmlReader)