我试图防止我的应用处理的XML中的恶意XXE注入。因此,我使用的是XDocument而不是XmlDocument。
XML表示Web请求的有效负载,因此我在其字符串内容上调用XDocument.Parse。但是,我发现XML(& XXE)中包含的XXE引用在结果中被替换为ENTITY xxe的实际值。
是否可以使用XDocument解析XML而无需替换& xxe?
由于
编辑:
我设法避免使用XmlResolver=null
XDocument.Load
替换XML中的xxes
答案 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)