हमारे पास हमारे कोड पर एक सुरक्षा लेखा परीक्षा थी, और उन्होंने उल्लेख किया कि हमारा कोड बाहरी इकाई (XXE) हमले के लिए कमजोर है।XXE हमले (.net में XmlDocument) को रोकने के लिए कैसे करें
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);
लेखा परीक्षा रिपोर्ट में वे कहते हैं कि इसके असफल क्योंकि एक्सएमएल इकाई URL हैं, जो इरादा contronl के बाहर हल कर सकते हैं शामिल कर सकते हैं - मैं निम्नलिखित कोड का उपयोग कर रहा हूँ। एक्सएमएल इकाई रिज़ॉल्वर बाहरी संदर्भों को हल करने और पुनर्प्राप्त करने का प्रयास करेगा। यदि हमलावर नियंत्रित XML इन कार्यों में से किसी एक को सबमिट किया जा सकता है, तो हमलावर आंतरिक नेटवर्क, स्थानीय फाइल सिस्टम या अन्य संवेदनशील डेटा के बारे में जानकारी तक पहुंच प्राप्त कर सकता है। इससे बचने के लिए मैंने निम्नलिखित कोड लिखा लेकिन यह काम नहीं करता है।
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);
लेकिन मैं यहां देख सकता हूं कि पाठक के पास xmlDoc (XmlDocument) में लोड करने का कोई मूल्य नहीं है। क्या कोई मदद कर सकता है जहां मैं चीजें खो रहा हूं? किसी की मदद की सराहना की जाती है!
यदि आप निश्चित हैं कि आप बाहरी संसाधनों का उपयोग नहीं करेंगे तो आप XmlDocument के XMLResolver उपयोगों को प्रमाणित कर सकते हैं। उदाहरण के लिए http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.xmlresolver.aspx देखें। इस उदाहरण में, आप XmlResolver के क्रेडेंशियल को उस खाते में सेट कर सकते हैं जिसमें केवल सीमित पहुंच अधिकार हैं, इसलिए संसाधनों को पुनर्प्राप्त करने का कोई भी प्रयास NT अनुमतियों के माध्यम से नियंत्रित किया जा सकता है। – dash
वास्तव में, यहाँ एक बहुत ही उपयोगी MSDN लेख जो अपने प्रश्न को संबोधित करता है: http://msdn.microsoft.com/en-us/magazine/ee335713.aspx – dash