flawopen.com/XXE/.NET XML readers
क्या .NET में XmlReader XXE से सुरक्षित है?
DTD को parser की उस अनुमति की तरह समझें जिससे वह XML में बताए गए दस्तावेज़ ला सके। XmlReader.Create डिफ़ॉल्ट रूप से DTD अस्वीकार करता है, इसलिए app इसे चालू किए बिना अविश्वसनीय दस्तावेज़ इस रास्ते का उपयोग नहीं कर सकता। पुराने API और target framework भी मायने रखते हैं: DTD को स्पष्ट रूप से रोकें और parsing सीमा पर बाहरी resolution बंद करें।
// सीधा legacy reader DTD parsing चालू कर सकता है // बाहरी resolver बताए गए resources ला सकता है। var legacy = new XmlTextReader(stream) { DtdProcessing = DtdProcessing.Parse, XmlResolver = new XmlUrlResolver() }; while (legacy.Read()) { } // untrusted XML के लिए DTD चालू करना जोखिमभरा है: var unsafeSettings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Parse, XmlResolver = new XmlUrlResolver() }; using var reader = XmlReader.Create(stream, unsafeSettings);
var settings = new XmlReaderSettings {
// DTD वाला हर document अस्वीकार करें।
DtdProcessing = DtdProcessing.Prohibit,
// अतिरिक्त सुरक्षा: बाहरी resources न लाएँ।
XmlResolver = null,
// app के वैध input के अनुसार सीमाएँ चुनें।
MaxCharactersInDocument = 1_000_000,
MaxCharactersFromEntities = 1_024,
};
using var reader = XmlReader.Create(stream, settings);
var doc = new XmlDocument { XmlResolver = null };
doc.Load(reader);
आप कौन-सा XML API और .NET संस्करण इस्तेमाल कर रहे हैं?
.NET has several XML APIs whose defaults have differed, and whose defaults have also changed across framework versions. The practical summary:
- ✓डिफ़ॉल्ट settings वाला XmlReader.Create — DtdProcessing.Prohibit default है। अविश्वसनीय input पर इसे स्पष्ट रूप से सेट करें ताकि बाद में configuration बदलने से DTD अनजाने में चालू न हो।
- ✓XmlReaderSettings.XmlResolver — .NET Framework 4.5.2 में default null हुआ; पुराने target XmlUrlResolver इस्तेमाल कर सकते थे। स्पष्ट रूप से null सेट करें और EnableLegacyXmlSettings compatibility switch जाँचें।
- ✓XmlTextReader — इस पुराने API का सीधा उपयोग अलग defaults रखता है और DTD parse कर सकता है। स्पष्ट settings के साथ XmlReader.Create चुनें; अविश्वसनीय XML के साथ network या file resolver न जोड़ें।
- ✓XmlDocument और LINQ to XML — व्यवहार load करने के तरीके और target framework पर निर्भर है। hardened XmlReader दें और उपलब्ध resolver को null रखें।
.NET Framework 4.5.2 बदलाव ने XmlReaderSettings.XmlResolver को default रूप से null किया और MaxCharactersFromEntities को शुरू में 10 million रखा; इससे सभी XML API या configuration समान नहीं हो गए। Compatibility switch पुराने defaults वापस ला सकता है। Parser नीति स्पष्ट करें, document size सीमित करें और असली target framework तथा runtime configuration जाँचें।
अक्सर पूछे जाने वाले प्रश्न
हाँ। XmlReaderSettings.DtdProcessing का default Prohibit है; DTD मिलने पर exception आता है। फिर भी इसे स्पष्ट सेट करें और defense-in-depth के लिए XmlResolver = null रखें।
सुरक्षा के लिए XmlReaderSettings.XmlResolver default रूप से null हुआ और MaxCharactersFromEntities 10 million पर initialize होता है। EnableLegacyXmlSettings पुराने व्यवहार को लौटा सकता है; deployed configuration जाँचें, केवल target framework नहीं।
हो सकता है। इन formats में XML होता है, पर प्रभाव parser और settings पर निर्भर करता है। हर untrusted XML entry point पर hardened reader लगाएँ, input size सीमित करें और संबंधित format library के security निर्देश भी देखें।