我在尝试修复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仍然会在这部分代码中指出相同的错误消息。
我还有什么别的办法来解决它吗?我们没有任何外部参考,一切都是通过内联网。
答案 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();
}
请通过以下链接获取更多信息。
答案 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);
}
}