2014-02-21 1 views
1

Мы недавно запустить Veracode, что указывает на следующий метод:Каков наилучший способ исправить «Неправильное ограничение ссылки на внешние сущности xml»?

public XmlElement RunProcedureXmlElement(string Procedure, List<SqlParameter> Parameters) 
    { 
     DataSet ds = RunProcedureDataSet(Procedure, Parameters); 
     XmlDocument xmlDoc = new XmlDocument(); 
     StringBuilder strXML = new StringBuilder(); 

     foreach (DataTable dt in ds.Tables) 
     { 
      foreach (DataRow dr in dt.Rows) 
      { 
       strXML.Append(dr[0]); // Do I still need .ToString()??? 
      } 
     } 
     if (strXML.Length == 0) strXML.Append("<root total=\"0\"></root>"); 

     try 
     { 
      xmlDoc.LoadXml(strXML.ToString()); 
     } 
     catch (XmlException e) 
     { 

     } 

     return xmlDoc.DocumentElement; 
    } 

Что бы быть хорошим решением, чтобы исправить этот метод так Veracode перестает жаловаться?

Спасибо-х

+0

Это C#, не так ли? Было бы полезно отметить тег соответствующим образом, так как исправление этого (путем отказа в предоставлении документа от собственного DTD) требует знания XML-интерфейсов платформы. –

+0

Ahh - Я вижу, что вы уже запретили обработку DTD. Звучит как ошибка в VeraCode; Я возьму их. –

+0

Я положил DtdProcessing.Prohibit, чтобы исправить его. Раньше у меня его не было. Итак, никаких проблем с VeraCode. VeraCode указал на строку, где начинается мой метод. Мне было интересно, знаете ли вы, какая строка в этом методе VeraCode могла бы жаловаться? Это где я добавляю «", и если да, то я могу его заменить? Или это просто жаловалось, потому что я не занимался обработкой TD? – piterskiy

ответ

3

После выполнения некоторых исследований, этот кусок кода должен исправить:

 using (System.IO.MemoryStream stream = new System.IO.MemoryStream (Encoding.Default.GetBytes(strXML.ToString()))) 
     { 
      XmlReaderSettings settings = new XmlReaderSettings(); 
      settings.DtdProcessing = DtdProcessing.Prohibit; 
      using (XmlReader reader = XmlReader.Create(stream, settings)) 
      { 
       try 
       { 
        xmlDoc.Load(reader); 
       } 
       catch(XmlException e) 
       { 

       } 
      } 
     } 
1

я была такая же проблема с Veracode, и следующие решить ее.
После объявления XmlReader:

XmlDocument xmlDoc = new XmlDocument(); 

Добавить линия:

xmlDoc.XmlResolver = null; 
Смежные вопросы