2015-08-24 1 views
0

Я изменил код при попытке исправить ошибку Veracode для Improper Restriction of XML External Entity Reference, но это не исправило.Не удается исправить неправильное ограничение внешней ошибки XML External Entity

Вот код, у меня сейчас:

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

Try XmlTextReader вместо XMLReader. Иногда текстовый Reader принимает ошибки, которые XML Reader отвергает. – jdweng

ответ

1

Установите XmlResolver в нуль:

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

Добро пожаловать в переполнение стека! Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. – ryanyuyu

0

Это не смягчать недостаток, изъян будет в serializer.Deserialize Любая помощь приветствуется

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); 
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); 
     } 
    } 
0

Set 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

Смежные вопросы