为了防止XXE攻击,是否必须将XMLResolver设置为null?

时间:2019-03-27 08:06:49

标签: c# xml xmldocument .net-framework-version xxe

我正在尝试复制以下链接中发布的XXE场景

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

正如我从文档中读到的,当未明确设置XMLResolver时,以下代码块在以4.5.2+目标框架版本运行时不应加载DTD。但是,我看到了文件的内容。如果将XMLResolver设置为null,则不会按预期加载内容。

为什么目标框架不影响结果?我的目的是在这里验证这种情况,并将其应用到我的项目中。

static void LoadXML()
 {
   string xxePayload = "<!DOCTYPE doc [<!ENTITY win SYSTEM 'file:///C:/Users/testdata2.txt'>]>" 
                     + "<doc>&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 个答案:

答案 0 :(得分:-1)

你的 targetFramework 是在编译中还是在 httpRuntime 中? 请检查两者中的 targetFramework。

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