Wir haben eine Sicherheitsüberprüfung für unseren Code durchgeführt, und sie haben erwähnt, dass unser Code anfällig für Angriffe durch externe Entitäten (XXE) ist. Ich verwende folgenden Code -So verhindern Sie den XXE-Angriff (XmlDocument in .net)
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);
In Audit-Bericht sagen sie, dass ihr Versagen, weil XML-Entity-URLs enthalten, die außerhalb der beabsichtigten contronl auflösen kann. Der XML-Entitätsresolver versucht, externe Referenzen aufzulösen und abzurufen. Wenn Angreifer-gesteuertes 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, habe ich den folgenden Code geschrieben, 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 Leser keinen Wert haben in xmlDoc zu laden (XmlDocument). Kann mir jemand helfen, wo ich Dinge vermisse? Wer Hilfe ist, wird geschätzt!
Wenn Sie sicher sind, dass Sie keine externen Ressourcen verwenden, können Sie die Anmeldeinformationen, die der XmlDocument XMLResolver verwendet, kontrollieren. Ein Beispiel finden Sie in http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.xmlresolver.aspx. In diesem Fall könnten Sie die Anmeldeinformationen des XmlResolvers auf ein Konto mit eingeschränkten Zugriffsrechten festlegen, sodass jeder Versuch, Ressourcen abzurufen, über NT-Berechtigungen gesteuert werden kann. – dash
In der Tat ist hier ein sehr nützlicher MSDN-Artikel, der Ihre Frage anspricht: http://msdn.microsoft.com/en-us/magazine/ee335713.aspx – dash