So verhindern Sie einen XXE-Angriff (XmlDocument in .net)

Wir hatten eine Sicherheitsüberprüfung für unseren Code und sie erwähnten, dass unser Code für EXternal Entity (XXE) -Angriffe anfällig ist. Ich benutze folgenden Code -

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

Im Audit-Bericht heißt es, dass es fehlschlägt, weil XML-Entitäten URLs enthalten können, die außerhalb der beabsichtigten Steuerung aufgelöst werden können. XML-Entity-Resolver versucht, externe Referenzen aufzulösen und abzurufen. Wenn angreifergesteuertes XML an eine dieser Funktionen übergeben werden kann, kann der Angreifer Zugriff auf Informationen über ein internes Netzwerk, ein lokales Dateisystem oder andere vertrauliche Daten erhalten. Um dies zu vermeiden, schrieb ich den folgenden Code, aber es funktioniert nicht.

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

aber ich kann hier sehen, dass der Leser keinen Wert zum Laden in xmlDoc (XmlDocument) hat. Kann jemand helfen, wo mir Dinge fehlen? Jede Hilfe wird geschätzt!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage