Должен ли я устанавливать XmlResolver в значение null для предотвращения атак XXE?

#c# #xml #xmldocument #.net-framework-version #xxe

#c# #xml #xmldocument #.net-framework-version #xxe

Вопрос:

Я пытаюсь воспроизвести сценарий XXE, который размещен по следующей ссылке

https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md

Как я прочитал из документации, следующий блок кода не должен загружать DTD при его запуске с целевой версией framework 4.5.2 , когда XmlResolver явно не задан. Однако я вижу содержимое файла. Если я установлю для XmlResolver значение null, он не загрузит содержимое, как ожидалось.

Почему целевая платформа не влияет на результат? Моя цель — проверить этот сценарий здесь и применить решение в моем проекте.

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

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

Комментарии:

1. Я почти уверен, что значение null по умолчанию было установлено в .NET 4.6, а не раньше (даже то, что вы можете прочитать в OWASP CheatSheet). Я рекомендую установить для xmlDoc.XmlResolver значение null по умолчанию при всем синтаксическом анализе XML для моего разработчика даже в .NET 4.6 framework

Ответ №1:

Ваш targetFramework находится в процессе компиляции или HttpRuntime? Пожалуйста, проверьте targetFramework в обоих.

 <system.web>
      <compilation targetFramework="4.6" />
      <httpRuntime targetFramework="4.6" />
      <!--... many other things -->
</system.web>