FlawOpen

flawopen.com/XXE/.NET XML readers

क्या .NET में XmlReader XXE से सुरक्षित है?

CWE-611: XML External Entity Referenceसंक्षिप्त उत्तर
संक्षिप्त उत्तर

DTD को parser की उस अनुमति की तरह समझें जिससे वह XML में बताए गए दस्तावेज़ ला सके। XmlReader.Create डिफ़ॉल्ट रूप से DTD अस्वीकार करता है, इसलिए app इसे चालू किए बिना अविश्वसनीय दस्तावेज़ इस रास्ते का उपयोग नहीं कर सकता। पुराने API और target framework भी मायने रखते हैं: DTD को स्पष्ट रूप से रोकें और parsing सीमा पर बाहरी resolution बंद करें।

असुरक्षित — legacy या कमजोर की गई settings
// सीधा 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);
सुरक्षित — DTD और बाहरी संसाधन रोकें
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:

.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 जाँचें।

अक्सर पूछे जाने वाले प्रश्न

क्या XmlReader.Create डिफ़ॉल्ट रूप से DTD रोकता है?

हाँ। XmlReaderSettings.DtdProcessing का default Prohibit है; DTD मिलने पर exception आता है। फिर भी इसे स्पष्ट सेट करें और defense-in-depth के लिए XmlResolver = null रखें।

.NET Framework 4.5.2 में क्या बदला?

सुरक्षा के लिए XmlReaderSettings.XmlResolver default रूप से null हुआ और MaxCharactersFromEntities 10 million पर initialize होता है। EnableLegacyXmlSettings पुराने व्यवहार को लौटा सकता है; deployed configuration जाँचें, केवल target framework नहीं।

क्या यह SOAP, SAML या Office दस्तावेज़ parsing को प्रभावित करता है?

हो सकता है। इन formats में XML होता है, पर प्रभाव parser और settings पर निर्भर करता है। हर untrusted XML entry point पर hardened reader लगाएँ, input size सीमित करें और संबंधित format library के security निर्देश भी देखें।

स्रोत और संदर्भ

यह भी देखें XML External Entity (XXE) इंजेक्शन (CWE-611): यह कैसे काम करता है और इससे कैसे बचें — flawopen.com Java XXE: क्या DocumentBuilderFactory सुरक्षित है? Python XML XXE सुरक्षा: ElementTree, Expat और lxml