System.Xml Namespace
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt standardbasierte Unterstützung für die Verarbeitung von XML bereit.
Klassen
| Name | Beschreibung |
|---|---|
| NameTable |
Implementiert einen singlethreaded XmlNameTable. |
| UniqueId |
Ein eindeutiger Bezeichner, der für Guids optimiert ist. |
| XmlAttribute |
Stellt ein Attribut dar. Gültige und Standardwerte für das Attribut werden in einer Dokumenttypdefinition (DTD) oder einem Schema definiert. |
| XmlAttributeCollection |
Stellt eine Auflistung von Attributen dar, auf die über den Namen oder den Index zugegriffen werden kann. |
| XmlBinaryReaderSession |
Ermöglicht eine dynamische Verwaltung optimierter Zeichenfolgen. |
| XmlBinaryWriterSession |
Ermöglicht die Verwendung eines dynamischen Wörterbuchs zum Komprimieren allgemeiner Zeichenfolgen, die in einer Nachricht angezeigt werden und den Zustand beibehalten. |
| XmlCDataSection |
Stellt einen CDATA-Abschnitt dar. |
| XmlCharacterData |
Stellt Textmanipulationsmethoden bereit, die von mehreren Klassen verwendet werden. |
| XmlComment |
Stellt den Inhalt eines XML-Kommentars dar. |
| XmlConvert |
Codiert und decodiert XML-Namen und stellt Methoden zum Konvertieren zwischen gängigen Sprachlaufzeittypen und XSD-Typen (XML Schema Definition Language) bereit. Beim Konvertieren von Datentypen sind die zurückgegebenen Werte gebietsschemaunabhängig. |
| XmlDataDocument |
Ermöglicht das Speichern, Abrufen und Bearbeiten von strukturierten Daten über eine relationale DataSet. |
| XmlDeclaration |
Stellt den XML-Deklarationsknoten <?xml version='1.0'...?.> |
| XmlDictionary |
Implementiert ein Wörterbuch, das zum Optimieren der XML-Reader-/Writer-Implementierungen von Windows Communication Foundation (WCF) verwendet wird. |
| XmlDictionaryReader |
Eine |
| XmlDictionaryReaderQuotas |
Enthält konfigurierbare Kontingentwerte für XmlDictionaryReaders. |
| XmlDictionaryString |
Stellt einen Eintrag dar, der in einem XmlDictionary. |
| XmlDictionaryWriter |
Stellt eine abstrakte Klasse dar, von der Windows Communication Foundation (WCF) von der Serialisierung und Deserialisierung abgeleitet XmlWriter wird. |
| XmlDocument |
Stellt ein XML-Dokument dar. Sie können diese Klasse verwenden, um XML in einem Dokument zu laden, zu überprüfen, zu bearbeiten, hinzuzufügen und zu positionieren. |
| XmlDocumentFragment |
Stellt ein einfaches Objekt dar, das für Struktureinfügevorgänge nützlich ist. |
| XmlDocumentType |
Stellt die Dokumenttypdeklaration dar. |
| XmlDocumentXPathExtensions |
Stellt Erweiterungsmethoden für die XmlDocument Dokumentnavigation und XmlNode die Dokumentnavigation bereit. |
| XmlElement |
Stellt ein Element dar. |
| XmlEntity |
Stellt eine Entitätsdeklaration dar, z <. B. ! ENTITY... >. |
| XmlEntityReference |
Stellt einen Entitätsverweisknoten dar. |
| XmlException |
Gibt detaillierte Informationen zur letzten Ausnahme zurück. |
| XmlImplementation |
Definiert den Kontext für eine Gruppe von XmlDocument Objekten. |
| XmlLinkedNode |
Ruft den Knoten unmittelbar vor oder nach diesem Knoten ab. |
| XmlNamedNodeMap |
Stellt eine Auflistung von Knoten dar, auf die nach Namen oder Index zugegriffen werden kann. |
| XmlNamespaceManager |
Behebt, fügt Namespaces zu einer Auflistung hinzu und entfernt sie und stellt die Bereichsverwaltung für diese Namespaces bereit. |
| XmlNameTable |
Tabelle mit atomisierten Zeichenfolgenobjekten. |
| XmlNode |
Stellt einen einzelnen Knoten im XML-Dokument dar. |
| XmlNodeChangedEventArgs |
Stellt Daten für die NodeChangedEreignisse , NodeChanging, , NodeInsertedund NodeInsertingdie NodeRemoved Ereignisse bereit NodeRemoving . |
| XmlNodeList |
Stellt eine sortierte Auflistung von Knoten dar. |
| XmlNodeReader |
Stellt einen Reader dar, der schnellen, nicht zwischengespeicherten Vorwärtszugriff nur auf XML-Daten in einer XmlNode. |
| XmlNotation |
Stellt eine Notationsdeklaration dar, z. B <. ! NOTATION... >. |
| XmlParserContext |
Stellt alle Kontextinformationen bereit, die XmlReader zum Analysieren eines XML-Fragments erforderlich sind. |
| XmlProcessingInstruction |
Stellt eine Verarbeitungsanweisung dar, die xml definiert, um prozessorspezifische Informationen im Text des Dokuments beizubehalten. |
| XmlQualifiedName |
Stellt einen XML-qualifizierten Namen dar. |
| XmlReader |
Stellt einen Reader dar, der schnellen, nicht zwischengespeicherten, vorwärtsgeschützten Zugriff auf XML-Daten bereitstellt. |
| XmlReaderSettings |
Gibt eine Reihe von Features an, die für das XmlReader von der Create Methode erstellte Objekt unterstützt werden sollen. |
| XmlResolver |
Löst externe XML-Ressourcen auf, die durch einen Uniform Resource Identifier (URI) benannt werden. |
| XmlSecureResolver |
Trägt dazu bei, eine weitere Implementierung XmlResolver zu sichern, indem das XmlResolver Objekt umschlossen und die Ressourcen eingeschränkt werden, auf die der zugrunde liegende XmlResolver Zugriff hat. |
| XmlSignificantWhitespace |
Stellt Leerraum zwischen Markup in einem gemischten Inhaltsknoten oder Leerzeichen innerhalb eines xml:space= "preserve"-Bereichs dar. Dies wird auch als signifikanter Leerraum bezeichnet. |
| XmlText |
Stellt den Textinhalt eines Elements oder Attributs dar. |
| XmlTextReader |
Stellt einen Reader dar, der schnellen, nicht zwischengespeicherten, vorwärtsgeschützten Zugriff auf XML-Daten bereitstellt. Es wird empfohlen, stattdessen die XmlReader Klasse zu verwenden. |
| XmlTextWriter |
Stellt einen Writer dar, der eine schnelle, nicht zwischengespeicherte, vorwärtsgespeicherte Methode zum Generieren von Datenströmen oder Dateien mit XML-Daten bereitstellt, die der W3C Extensible Markup Language (XML) 1.0 und den Namespaces in XML-Empfehlungen entsprechen. Es wird empfohlen, stattdessen die XmlWriter Klasse zu verwenden. |
| XmlUrlResolver |
Löst externe XML-Ressourcen auf, die durch einen Uniform Resource Identifier (URI) benannt werden. |
| XmlValidatingReader |
Stellt einen Reader dar, der die Dokumenttypdefinition (DTD), XML-Data Reduced (XDR)-Schema und die XSD-Überprüfung (XML Schema Definition Language) bereitstellt. Diese Klasse ist veraltet. Es wird empfohlen, die XmlReaderSettings Klasse und die Create Methode zum Erstellen eines validierenden XML-Readers zu verwenden. |
| XmlWhitespace |
Stellt den Leerraum im Elementinhalt dar. |
| XmlWriter |
Stellt einen Writer dar, der eine schnelle, nicht zwischengespeicherte, vorwärtsbasierte Möglichkeit zum Generieren von Datenströmen oder Dateien mit XML-Daten bereitstellt. |
| XmlWriterSettings |
Gibt eine Reihe von Features an, die für das XmlWriter von der Create Methode erstellte Objekt unterstützt werden sollen. |
| XmlXapResolver |
Der XmlXapResolver-Typ wird verwendet, um Ressourcen im XAP-Paket der Silverlight-Anwendung aufzulösen. |
Schnittstellen
| Name | Beschreibung |
|---|---|
| IApplicationResourceStreamResolver |
Stellt einen Ressourcendatenstromlöser der Anwendung dar. |
| IFragmentCapableXmlDictionaryWriter |
Enthält Eigenschaften und Methoden, die bei der Implementierung durch ein XmlDictionaryWriter, die Verarbeitung von XML-Fragmenten ermöglicht. |
| IHasXmlNode |
Ermöglicht es einer Klasse, einen XmlNode aus dem aktuellen Kontext oder der aktuellen Position zurückzugeben. |
| IStreamProvider |
Stellt eine Schnittstelle dar, die von Klassen implementiert werden kann, die Datenströme bereitstellen. |
| IXmlBinaryReaderInitializer |
Stellt Methoden zum Erneutitialisieren eines binärlesers zum Lesen eines neuen Dokuments bereit. |
| IXmlBinaryWriterInitializer |
Gibt Die Implementierungsanforderungen für BINÄRE XML-Autoren an, die von dieser Schnittstelle abgeleitet sind. |
| IXmlDictionary |
Ein |
| IXmlLineInfo |
Stellt eine Schnittstelle bereit, mit der eine Klasse Zeilen- und Positionsinformationen zurückgeben kann. |
| IXmlMtomReaderInitializer |
Gibt Implementierungsanforderungen für XML-MTOM-Reader an, die von dieser Schnittstelle abgeleitet werden. |
| IXmlMtomWriterInitializer |
Wenn diese Schnittstelle von einem MTOM Writer implementiert wird, stellt diese Schnittstelle die Initialisierung für einen MTOM Writer sicher. |
| IXmlNamespaceResolver |
Bietet schreibgeschützten Zugriff auf eine Reihe von Präfix- und Namespacezuordnungen. |
| IXmlTextReaderInitializer |
Gibt Implementierungsanforderungen für XML-Textleser an, die von dieser Schnittstelle abgeleitet werden. |
| IXmlTextWriterInitializer |
Gibt Implementierungsanforderungen für XML-Textautoren an, die von dieser Schnittstelle abgeleitet werden. |
Enumerationen
| Name | Beschreibung |
|---|---|
| ConformanceLevel |
Gibt die Menge der Eingabe- oder Ausgabeüberprüfung an, die XmlReader und XmlWriter Objekte ausführen. |
| DtdProcessing |
Gibt die Optionen für die Verarbeitung von DTDs an. Die DtdProcessing-Aufzählung wird von der XmlReaderSettings Klasse verwendet. |
| EntityHandling |
Gibt an, wie das XmlTextReader oder XmlValidatingReader Entitäten behandelt. |
| Formatting |
Gibt Formatierungsoptionen für die XmlTextWriteran. |
| NamespaceHandling |
Gibt an, ob doppelte Namespacedeklarationen in der XmlWriterentfernt werden sollen. |
| NewLineHandling |
Gibt an, wie Zeilenumbrüche behandelt werden. |
| ReadState |
Gibt den Status des Readers an. |
| ValidationType |
Gibt den Typ der auszuführenden Überprüfung an. |
| WhitespaceHandling |
Gibt an, wie Leerraum behandelt wird. |
| WriteState |
Gibt den Status des XmlWriteran. |
| XmlDateTimeSerializationMode |
Gibt an, wie der Zeitwert beim Konvertieren zwischen Zeichenfolge und DateTimebehandelt wird. |
| XmlDictionaryReaderQuotaTypes |
Listet die konfigurierbaren Kontingentwerte für XmlDictionaryReaders auf. |
| XmlNamespaceScope |
Definiert den Namespacebereich. |
| XmlNodeChangedAction |
Gibt den Typ der Knotenänderung an. |
| XmlNodeOrder |
Beschreibt die Dokumentreihenfolge eines Knotens im Vergleich zu einem zweiten Knoten. |
| XmlNodeType |
Gibt den Knotentyp an. |
| XmlOutputMethod |
Gibt die Methode an, die zum Serialisieren der XmlWriter Ausgabe verwendet wird. |
| XmlSpace |
Gibt den aktuellen |
| XmlTokenizedType |
Stellt den XML-Typ für die Zeichenfolge dar. Dadurch kann die Zeichenfolge als bestimmter XML-Typ gelesen werden, z. B. einen CDATA-Abschnittstyp. |
Delegaten
| Name | Beschreibung |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
Stellt die Methode dar, die Ereignisse NodeChangedverarbeitet, , NodeChanging, NodeInserted, NodeInsertingund NodeRemovedNodeRemoving ereignisse. |
Hinweise
Unterstützte Standards
Der System.Xml Namespace unterstützt die folgenden Standards:
- XML 1.0, einschließlich DTD-Unterstützung
- XML-Namespaces, sowohl stream-level als auch DOM
- XML-Schemas
- XPath-Ausdrücke
- XSLT-Transformationen
- DOM Level 1 Core
- DOM Level 2 Core
Lesen Sie den Abschnitt Unterschiede zwischen den W3C-Spezifikationen für zwei Fälle, in denen sich die XML-Klassen von den W3C-Empfehlungen unterscheiden.
Asynchrones Verarbeiten von XML
Die System.Xml.XmlReader Klassen System.Xml.XmlWriter enthalten eine Reihe asynchroner Methoden, die auf dem asynchronen Programmiermodell basieren. Diese Methoden können durch die Zeichenfolge "Async" am Ende ihrer Namen identifiziert werden. Mit diesen Methoden können Sie asynchronen Code schreiben, der Ihrem synchronen Code ähnelt, und Sie können ihren vorhandenen synchronen Code ganz einfach zu asynchronen Code migrieren.
Verwenden Sie die asynchronen Methoden in Apps, bei denen es erhebliche Netzwerkdatenstromlatenz gibt. Vermeiden Sie die Verwendung der asynchronen APIs für Speicherdatenstrom- oder lokalen Dateistream-Lese-/Schreibvorgänge. Der Eingabedatenstrom XmlTextReaderund XmlTextWriter sollte auch asynchrone Vorgänge unterstützen. Andernfalls werden Threads weiterhin durch E/A-Vorgänge blockiert.
Es wird nicht empfohlen, synchrone und asynchrone Funktionsaufrufe zu mischen, da Sie möglicherweise vergessen, das
awaitSchlüsselwort zu verwenden oder eine synchrone API zu verwenden, bei der eine asynchrone API erforderlich ist.Legen Sie das XmlReaderSettings.AsyncXmlWriterSettings.Async Attribut nicht auf
truefest, wenn Sie keine asynchrone Methode verwenden möchten.Wenn Sie vergessen, das
awaitSchlüsselwort beim Aufrufen einer asynchronen Methode anzugeben, sind die Ergebnisse nicht deterministisch: Möglicherweise erhalten Sie das erwartete Ergebnis oder eine Ausnahme.Wenn ein XmlReader Objekt einen großen Textknoten liest, kann es nur einen Teiltextwert zwischenspeichern und den Textknoten zurückgeben, sodass das Abrufen der XmlReader.Value Eigenschaft durch einen E/A-Vorgang blockiert wird. Verwenden Sie die XmlReader.GetValueAsync Methode, um den Textwert im asynchronen Modus abzurufen, oder verwenden Sie die XmlReader.ReadValueChunkAsync Methode, um einen großen Textblock in Blöcken zu lesen.
Wenn Sie ein XmlWriter Objekt verwenden, rufen Sie die XmlWriter.FlushAsync Methode vor dem Aufrufen XmlWriter.Close auf, um zu verhindern, dass ein E/A-Vorgang blockiert wird.
Unterschiede zu den W3C-Spezifikationen
In zwei Fällen, die Einschränkungen für Modellgruppenschemakomponenten umfassen, unterscheidet sich der System.Xml Namespace von den W3C-Empfehlungen.
Konsistenz in Elementdeklarationen:
In einigen Fällen erfüllt die System.Xml Implementierung bei Verwendung von Ersetzungsgruppen nicht die "Schemakomponenteneinschränkung: Elementdeklarationen konsistent", die im Abschnitt "Einschränkungen für Modellgruppenschemakomponenten " der W3C-Spezifikation beschrieben wird.
Das folgende Schema enthält z. B. Elemente, die denselben Namen haben, aber verschiedene Typen im gleichen Inhaltsmodell, und Ersetzungsgruppen werden verwendet. Dies sollte zu einem Fehler führen, das Schema wird jedoch System.Xml ohne Fehler kompiliert und überprüft.
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="t1"/>
<xs:complexType name="t1"/>
<xs:element name="e2" type="t2" substitutionGroup="e1"/>
<xs:complexType name="t2">
<xs:complexContent>
<xs:extension base="t1">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1"/>
<xs:element name="e2" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
In diesem Schema enthält der Typ t3 eine Abfolge von Elementen. Aufgrund der Ersetzung kann der Verweis auf das Element e1 aus der Sequenz entweder in element e1 des Typs t1 oder im Element e2 des Typs t2resultieren. Der letztere Fall würde zu einer Abfolge von zwei e2 Elementen führen, wobei ein Element vom Typ t2 und das andere vom Typ xs:intist.
Einzigartige Partikelzuordnung:
Unter den folgenden Bedingungen erfüllt die System.Xml Implementierung nicht die "Schema Component Constraint: Unique Particle Attribution", die im Abschnitt "Constraints on Model Group Schema Components " der W3C-Spezifikation beschrieben wird.
- Eines der Elemente in der Gruppe verweist auf ein anderes Element.
- Das referenzierte Element ist ein Kopfelement einer Ersetzungsgruppe.
- Die Ersetzungsgruppe enthält ein Element mit demselben Namen wie eines der Elemente in der Gruppe.
- Die Kardinalität des Elements, das auf das Ersetzungsgruppenkopfelement verweist, und das Element mit demselben Namen wie ein Ersetzungsgruppenelement ist nicht behoben (minOccurs maxOccurs < ).
- Die Definition des Elements, das auf die Ersetzungsgruppe verweist, steht vor der Definition des Elements mit demselben Namen wie ein Ersetzungsgruppenelement.
Beispielsweise ist im Schema unterhalb des Inhaltsmodells mehrdeutig und sollte einen Kompilierungsfehler verursachen, das Schema jedoch System.Xml ohne Fehler kompiliert.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="xs:int"/>
<xs:element name="e2" type="xs:int" substitutionGroup="e1"/>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e3" type="t3"/>
</xs:schema>
Wenn Sie versuchen, den folgenden XML-Code anhand des obigen Schemas zu überprüfen, schlägt die Überprüfung mit der folgenden Meldung fehl: "Das Element 'e3' hat ein ungültiges untergeordnetes Element 'e2'" und eine XmlSchemaValidationException Ausnahme wird ausgelöst.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
Um dieses Problem zu umgehen, können Sie Elementdeklarationen im XSD-Dokument austauschen. Beispiel:
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
wird wie folgt:
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
Hier ist ein weiteres Beispiel für dasselbe Problem:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="xs:string"/>
<xs:element name="e2" type="xs:string" substitutionGroup="e1"/>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e3" type="t3"/>
</xs:schema>
Wenn Sie versuchen, den folgenden XML-Code anhand des obigen Schemas zu überprüfen, schlägt die Überprüfung mit der folgenden Ausnahme fehl: "Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: The 'e2' el element is invalid - The value 'abc' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value."
<e3><e2>abc</e2></e3>
Sicherheitsüberlegungen
Die Typen und Member im System.Xml Namespace basieren auf dem .NET-Sicherheitssystem. In den folgenden Abschnitten werden Sicherheitsprobleme behandelt, die für XML-Technologien spezifisch sind.
Beachten Sie außerdem, dass Sie beim Verwenden der System.Xml Typen und Member, wenn die XML Daten enthält, die potenzielle Auswirkungen auf den Datenschutz haben, Ihre App auf eine Weise implementieren müssen, die den Datenschutz Ihrer Endbenutzer berücksichtigt.
Externer Zugriff
Mehrere XML-Technologien haben die Möglichkeit, andere Dokumente während der Verarbeitung abzurufen. Beispielsweise kann sich eine Dokumenttypdefinition (DTD) im zu analysierenden Dokument befinden. Die DTD kann auch in einem externen Dokument leben, auf das vom analysierten Dokument verwiesen wird. Die XML-Schemadefinitionssprache (XSD) und XSLT-Technologien haben auch die Möglichkeit, Informationen aus anderen Dateien einzuschließen. Diese externen Ressourcen können einige Sicherheitsbedenken darstellen. Sie möchten beispielsweise sicherstellen, dass Ihre App Dateien nur von vertrauenswürdigen Websites abruft und dass die abgerufene Datei keine schädlichen Daten enthält.
Die XmlUrlResolver Klasse wird verwendet, um XML-Dokumente zu laden und externe Ressourcen wie Entitäten, DTDs oder Schemas aufzulösen und Direktiven zu importieren oder einzuschließen.
Sie können diese Klasse überschreiben und das XmlResolver zu verwendende Objekt angeben. Verwenden Sie die XmlSecureResolver Klasse, wenn Sie eine Ressource öffnen müssen, die Sie nicht steuern oder die nicht vertrauenswürdig ist. Der XmlSecureResolver Umbruch ermöglicht XmlResolver es Ihnen, die Ressourcen einzuschränken, auf die der zugrunde liegende XmlResolver Zugriff hat.
Denial of Service
Die folgenden Szenarien gelten als weniger anfällig für Denial-of-Service-Angriffe, da die System.Xml Klassen eine Möglichkeit zum Schutz vor solchen Angriffen bieten.
Analysieren von TEXT-XML-Daten.
Analysieren von binär-XML-Daten, wenn die binär-XML-Daten von Microsoft SQL Server generiert wurden.
Schreiben von XML-Dokumenten und Fragmenten aus Datenquellen in das Dateisystem, Datenströme, ein TextWriteroder ein StringBuilder.
Laden von Dokumenten in das DOM -Objektobjekt (Document Object Model), wenn Sie ein XmlReader Objekt verwenden und XmlReaderSettings.DtdProcessing auf .DtdProcessing.Prohibit
Navigieren im DOM-Objekt.
Die folgenden Szenarien werden nicht empfohlen, wenn Sie sich Gedanken über Denial-of-Service-Angriffe machen oder wenn Sie in einer nicht vertrauenswürdigen Umgebung arbeiten.
DTD-Verarbeitung.
Schemaverarbeitung. Dazu gehört das Hinzufügen eines nicht vertrauenswürdigen Schemas zur Schemaauflistung, das Kompilieren eines nicht vertrauenswürdigen Schemas und das Validieren mithilfe eines nicht vertrauenswürdigen Schemas.
XSLT-Verarbeitung.
Analysieren beliebiger Datenströme des Benutzers, die binäre XML-Daten bereitgestellt haben.
DOM-Vorgänge wie Abfragen, Bearbeiten, Verschieben von Unterstrukturen zwischen Dokumenten und Speichern von DOM-Objekten
Wenn Sie sich gedanken über Denial-of-Service-Probleme oder wenn Sie mit nicht vertrauenswürdigen Quellen umgehen, aktivieren Sie die DTD-Verarbeitung nicht. Dies ist standardmäßig für XmlReader Objekte deaktiviert, die von der XmlReader.Create Methode erstellt werden.
Hinweis
Die XmlTextReader DTD-Verarbeitung ist standardmäßig zulässig. Verwenden Sie die XmlTextReader.DtdProcessing Eigenschaft, um dieses Feature zu deaktivieren.
Wenn die DTD-Verarbeitung aktiviert ist, können Sie die XmlSecureResolver Klasse verwenden, um die Ressourcen einzuschränken, auf die der XmlReader Zugriff möglich ist. Sie können Ihre App auch so entwerfen, dass die XML-Verarbeitung arbeitsspeicher- und zeitschränkt ist. Sie können beispielsweise Zeitlimits in Ihrer ASP.NET-App konfigurieren.
Überlegungen zur Verarbeitung
Da XML-Dokumente Verweise auf andere Dateien enthalten können, ist es schwierig zu bestimmen, wie viel Verarbeitungsleistung erforderlich ist, um ein XML-Dokument zu analysieren. Beispielsweise können XML-Dokumente eine DTD enthalten. Wenn die DTD geschachtelte Entitäten oder komplexe Inhaltsmodelle enthält, kann es zu viel Zeit dauern, bis das Dokument analysiert wird.
Bei Verwendung XmlReaderkönnen Sie die Größe des Dokuments einschränken, das analysiert werden kann, indem Sie die XmlReaderSettings.MaxCharactersInDocument Eigenschaft festlegen. Sie können die Anzahl der Zeichen einschränken, die sich aus der Erweiterung von Entitäten ergeben, indem Sie die XmlReaderSettings.MaxCharactersFromEntities Eigenschaft festlegen. Beispiele zum Festlegen dieser Eigenschaften finden Sie in den entsprechenden Referenzthemen.
Die XSD- und XSLT-Technologien verfügen über zusätzliche Funktionen, die sich auf die Verarbeitungsleistung auswirken können. Beispielsweise ist es möglich, ein XML-Schema zu erstellen, das bei der Auswertung über ein relativ kleines Dokument einen erheblichen Zeitaufwand erfordert. Es ist auch möglich, Skriptblöcke in ein XSLT-Stylesheet einzubetten. Beide Fälle stellen eine potenzielle Sicherheitsrisiken für Ihre App dar.
Beim Erstellen einer App, die die XslCompiledTransform Klasse verwendet, sollten Sie die folgenden Elemente und deren Auswirkungen beachten:
XSLT-Skripting ist standardmäßig deaktiviert. XSLT-Skripting sollte nur aktiviert werden, wenn Sie Skriptunterstützung benötigen und in einer voll vertrauenswürdigen Umgebung arbeiten.
Die XSLT-Funktion
document()ist standardmäßig deaktiviert. Wenn Sie diedocument()Funktion aktivieren, beschränken Sie die Ressourcen, auf die zugegriffen werden kann, indem Sie ein XmlSecureResolver Objekt an die XslCompiledTransform.Transform Methode übergeben.Erweiterungsobjekte sind standardmäßig aktiviert. Wenn ein XsltArgumentList Objekt, das Erweiterungsobjekte enthält, an die XslCompiledTransform.Transform Methode übergeben wird, werden die Erweiterungsobjekte verwendet.
XSLT-Stylesheets können Verweise auf andere Dateien und eingebettete Skriptblöcke enthalten. Ein böswilliger Benutzer kann dies ausnutzen, indem Sie Daten oder Stylesheets bereitstellen, die bei ausführung dazu führen können, dass Ihr System verarbeitet wird, bis der Computer wenig Ressourcen aufweist.
XSLT-Apps, die in einer gemischten Vertrauensumgebung ausgeführt werden, können zu Stylesheetspoofing führen. Beispielsweise kann ein böswilliger Benutzer ein Objekt mit einem schädlichen Stylesheet laden und an einen anderen Benutzer übergeben, der die XslCompiledTransform.Transform Methode anschließend aufruft und die Transformation ausführt.
Diese Sicherheitsprobleme können behoben werden, indem skripting oder die document() Funktion nicht aktiviert wird, es sei denn, das Stylesheet stammt aus einer vertrauenswürdigen Quelle und akzeptiert keine XslCompiledTransform Objekte, XSLT-Stylesheets oder XML-Quelldaten aus einer nicht vertrauenswürdigen Quelle.
Ausnahmenbehandlung
Ausnahmen, die von Komponenten auf niedrigerer Ebene ausgelöst werden, können Pfadinformationen offenlegen, die für die App nicht verfügbar gemacht werden sollen. Ihre Apps müssen Ausnahmen erfassen und entsprechend verarbeiten.