1

我正在尝试防止我的应用程序处理的 XML 中的恶意 XXE 注入。因此我使用 XDocument 而不是 XmlDocument。

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

是否可以在不替换 &xxe 的情况下使用 XDocument 解析 XML?

谢谢

编辑:我设法避免使用XmlResolver=nullfor替换 XML 中的 xxesXDocument.Load

4

2 回答 2

0

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

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

来自 MSDN:

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

于 2015-10-21T09:44:49.853 回答
0

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

Dim objXmlReader As System.Xml.XmlTextReader = Nothing
objXmlReader = New System.Xml.XmlTextReader(_patternFilePath)
objXmlReader.XmlResolver = Nothing
patternDocument = XDocument.Load(objXmlReader)
于 2018-06-08T08:46:52.707 回答