Jak zapobiec atakowi XXE (XmlDocument in .net)

Mieliśmy audyt bezpieczeństwa naszego kodu i wspominali, że nasz kod jest podatny na atak EXternal Entity (XXE). Używam następującego kodu -

string OurOutputXMLString=
"<ce><input><transaction><length>00000</length><tran_type>Login</tran_type></transaction><user><user_id>ce_userid</user_id><subscriber_name>ce_subscribername</subscriber_name><subscriber_id>ce_subscriberid</subscriber_id><group_id>ce_groupid</group_id><permissions></permissions></user><consumer><login_details><username>UnitTester9</username><password>pDhE5AsKBHw85Sqgg6qdKQ==</password><pin>tOlkiae9epM=</pin></login_details></consumer></input></ce>"

 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.LoadXml(OurOutputXMLString);

W raporcie z audytu mówią, że jego niepowodzenie, ponieważ encja XML może zawierać adresy URL, które mogą rozwiązać się poza zamierzonym kontronem. Rozpoznawacz encji XML spróbuje rozwiązać i pobrać odwołania zewnętrzne. Jeśli XML kontrolowany przez atakującego może zostać przesłany do jednej z tych funkcji, atakujący może uzyskać dostęp do informacji o sieci wewnętrznej, lokalnym systemie plików lub innych poufnych danych. Aby tego uniknąć, napisałem następujący kod, ale to nie działa.

MemoryStream stream =
    new MemoryStream(System.Text.Encoding.Default.GetBytes(OurOutputXMLString));

XmlReaderSettings settings = new XmlReaderSettings();

settings.DtdProcessing = DtdProcessing.Prohibit;
settings.MaxCharactersFromEntities = 6000;
XmlReader reader = XmlReader.Create(stream, settings);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);

ale widzę tutaj, że czytnik nie ma żadnej wartości do załadowania do xmlDoc (XmlDocument). Czy ktoś może pomóc, gdzie brakuje mi rzeczy? Każda pomoc jest doceniana!

questionAnswers(2)

yourAnswerToTheQuestion