Mieliśmy audyt bezpieczeństwa na naszym kodzie, i wspomniał, że nasz kod jest podatny na zewnętrzne jednostki (XXe) ataku. Używam następujący kod -Jak zapobiec atak XXe (XmlDocument w .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);
W raporcie Audytu mówią, że jego wadą, ponieważ jednostka XML może zawierać adresów URL, które można rozwiązać poza zamierzonym contronl. Narzędzie do rozstrzygania encji XML spróbuje rozwiązać i pobrać odnośniki zewnętrzne. Jeśli atakujący sterowany XML można składać do jednej z tych funkcji, to osobie atakującej uzyskanie dostępu do informacji o sieci wewnętrznej, lokalnego systemu plików lub innych danych wrażliwych. Aby tego uniknąć i napisał następujący kod, ale nie robi praca.
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 rzeczy? Każda pomoc jest doceniana!
Jeśli masz pewność, że nie zamierzasz korzystać z zasobów zewnętrznych, możesz kontrolować poświadczenia używane przez XMLResolver XmlDocument. Zobacz przykład: http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.xmlresolver.aspx. W tym przypadku można ustawić poświadczenia XmlResolver na konto, które ma tylko ograniczone prawa dostępu, więc każda próba pobrania zasobów może być kontrolowana za pomocą uprawnień NT. – dash
W rzeczywistości jest to bardzo przydatny artykuł MSDN, który odpowiada na twoje pytanie: http://msdn.microsoft.com/en-us/magazine/ee335713.aspx – dash