无法修复XML外部实体引用错误的不正确限制

时间:2015-08-24 15:53:04

标签: c# xml veracode

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

以下是我现在的代码:

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 个答案:

答案 0 :(得分:1)

XmlResolver设为null:

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

答案 1 :(得分:1)

设置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 External Entity (XXE) Prevention Cheat Sheet

答案 2 :(得分:0)

这并没有减轻缺陷,缺陷是在序列化器上。反序列化 任何帮助表示赞赏

XmlSerializer serializer = new XmlSerializer(typeof(MenuConfigBase));
XmlReaderSettings settings = new XmlReaderSettings
{
     // DtdProcessing = DtdProcessing.Prohibit,( not required as this is default value in .net 4.5
     XmlResolver = null
};

XmlReader reader = XmlReader.Create(Path.GetFullPath(path), settings);
var cfgBase = (MenuConfigBase)serializer.Deserialize(reader);

答案 3 :(得分: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);
        }
    }