0

我在尝试修复 Veracode 错误时更改了代码Improper Restriction of XML External Entity Reference,但它没有修复它。

这是我现在拥有的代码:

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

但是,Veracode 仍然指出这部分代码带有相同的错误信息。

还有什么我应该做的来解决它吗?我们没有任何外部参考,一切都是通过内网。

4

3 回答 3

2

设置XmlResolver为空:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.XmlResolver = null;
于 2015-11-05T15:55:52.253 回答
2

设置 XmlResolver = null 将解决该问题。

static void LoadXML()
{
  string xml = "<?xml version=\"1.0\" ?><!DOCTYPE doc 
    [<!ENTITY win SYSTEM \"file:///C:/Users/user/Documents/testdata2.txt\">]
    ><doc>&win;</doc>";

  XmlDocument xmlDoc = new XmlDocument();
  xmlDoc.XmlResolver = null;   // Setting this to NULL disables DTDs - Its NOT null by default.
  xmlDoc.LoadXml(xml);
  Console.WriteLine(xmlDoc.InnerText);
  Console.ReadLine();
}

请通过以下链接了解更多信息。

XML 外部实体 (XXE) 预防备忘单

于 2018-02-20T10:59:05.740 回答
0

原始答案适用于 xmlDoc.Load(xmlreader)。

第二个问题是不同的背景,需要不同的技术。

    using (System.IO.StringReader rxml = new System.IO.StringReader(myxmltext))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(MenuConfigBase));

        using (XmlTextReader xr = new XmlTextReader(rxml))
        {
            xr.XmlResolver = null;

            var cfgBase = (MenuConfigBase)serializer.Deserialize(xr);
        }
    }
于 2017-05-02T19:30:55.213 回答