如何使用XmlUrlResolver修复" XML外部实体(XXE)"攻击?

时间:2015-10-07 15:41:16

标签: c# xml xml-parsing veracode

我们已运行Veracode,而一些.cs文件的安全流量为Improper Restriction of XML External Entity Reference ('XXE')

几个月前,当遇到不同应用程序的同类问题时,我通过添加以下内容解决了这个问题:

settings.DtdProcessing = DtdProcessing.Prohibit;

现在,应用相同的修复程序并不能解决问题。

我已经尝试了解决XXE问题的所有可能的解决方案,但它没有帮助。

我也有:

XmlDocument doc = null;

.....

settings.DtdProcessing = DtdProcessing.Prohibit;
settings.XmlResolver = null;

....

doc = new XmlDocument();
doc.XmlResolver = null;

但它也没有解决它。

因此,我遇到了其他提供的创建自定义解析器类的解决方案。

现在,我有以下代码:

XmlDocument doc = null;
using (System.IO.MemoryStream xmlstream = new System.IO.MemoryStream(System.Text.Encoding.Default.GetBytes(dsEQ.GetXml().ToString())))
{
   XmlReaderSettings settings = new XmlReaderSettings { XmlResolver = new CustomeResolver() };
   settings.DtdProcessing = DtdProcessing.Prohibit;
   settings.XmlResolver = null;
   using (XmlReader xmlreader = XmlReader.Create(xmlstream, settings))
   {
       try
       {
           doc = new XmlDocument();
           doc.XmlResolver = null;
           doc.Load(xmlreader);
       }
       catch (XmlException e)
       {
          Connection.LogError(e.ToString(), e.Message);
       }
    }
 }

这是一个自定义解析器类:

private class CustomeResolver : XmlUrlResolver
{
    public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
    {
         return base.GetEntity(absoluteUri, role, ofObjectToReturn);
    }
}

在部署更改之前,我想知道我是否以正确的方式使用该类,如果没有,如何更改它并将解决问题?

0 个答案:

没有答案