System.Xml Namespace

Stellt standardisierte Unterstützung für die XML-Verarbeitung bereit.

Klassen

NameTable

Implementiert eine Singlethread-XmlNameTable.

UniqueId

Ein für GUIDs optimierter eindeutiger Bezeichner.

XmlAttribute

Stellt ein XML-Attribut dar. Gültige Werte und Standardwerte für das Attribut werden in einer Dokumenttypdefinition (DTD) oder ein Schema definiert.

XmlAttributeCollection

Stellt eine Auflistung von Attributen dar, auf die nach Name oder Index zugegriffen werden kann.

XmlBinaryReaderSession

Aktiviert optimierte Zeichenfolgen, die auf dynamische Weise verwaltet werden sollen.

XmlBinaryWriterSession

Ermöglicht die Komprimierung allgemeiner Zeichenfolgen, die in einer Nachricht erscheinen und den Zustand beibehalten, unter Verwendung eines dynamischen Wörterbuchs.

XmlCDataSection

Stellt einen CDATA-Abschnitt dar.

XmlCharacterData

Stellt Textmanipulationsmethoden, die von mehreren Klassen verwendet werden.

XmlComment

Stellt den Inhalt eines SOAP-Headers dar.

XmlConvert

Codiert und decodiert XML-Namen und stellt Methoden für das Konvertieren zwischen Typen der Common Language Runtime und XSD-Typen (XML Schema Definition) bereit. Bei der Konvertierung von Datentypen sind die zurückgegebenen Werte vom Gebietsschema unabhängig.

XmlDataDocument

Ermöglicht das Speichern, Abrufen und Bearbeiten strukturierter Daten über ein relationales DataSet.

XmlDeclaration

Stellt den Knoten für die XML-Deklaration <?xml version='1.0'...?> dar.

XmlDictionary

Implementiert ein Wörterbuch, mit dem die XML-Reader-/Writerimplementierungen der Windows Communication Foundation (WCF) optimiert werden.

XmlDictionaryReader

Eine abstract-Klasse, die die Windows Communication Foundation (WCF) von XmlReader ableitet, um Serialisierung und Deserialisierung durchzuführen.

XmlDictionaryReaderQuotas

Enthält konfigurierbare Kontingentwerte für XmlDictionaryReaders.

XmlDictionaryString

Stellt einen in XmlDictionary gespeicherten Eintrag dar.

XmlDictionaryWriter

Stellt eine abstrakte Klasse dar, die die Windows Communication Foundation (WCF) von XmlWriter ableitet, um Serialisierung und Deserialisierung durchzuführen.

XmlDocument

Stellt ein XML-Dokument dar. Sie können diese Klasse zum Laden, Überprüfen, Bearbeiten, Hinzufügen und Positionieren von XML in einem Dokument verwenden.

XmlDocumentFragment

Stellt ein kompaktes Objekt dar, das für das Einfügen in Strukturen nützlich ist.

XmlDocumentType

Stellt die Dokumenttypdeklaration dar.

XmlDocumentXPathExtensions

Stellt Erweiterungsmethoden für das XmlDocument und XmlNode zur Dokumentnavigtion bereit.

XmlElement

Stellt einen Element dar.

XmlEntity

Stellt eine Entitätsdeklaration dar, z.B. <!ENTITY...> .

XmlEntityReference

Stellt einen Entitätsverweisknoten dar.

XmlException

Gibt ausführliche Informationen über die letzte Ausnahme zurück.

XmlImplementation

Definiert den Kontext für eine Gruppe von XmlDocument-Objekten

XmlLinkedNode

Ruft den Knoten ab, der diesem Knoten unmittelbar vorausgeht oder auf ihn folgt.

XmlNamedNodeMap

Stellt eine Auflistung von Knoten dar, auf die nach Name oder Index zugegriffen werden kann.

XmlNamespaceManager

Löst Namespaces auf, fügt sie einer Auflistung hinzu bzw. entfernt sie daraus und ermöglicht die Verwaltung der Gültigkeitsbereiche dieser Namespaces.

XmlNameTable

Tabelle mit atomisierten Zeichenfolgenobjekten.

XmlNode

Stellt einen einzelnen Knoten im XML-Dokument dar.

XmlNodeChangedEventArgs

Stellt Daten für das NodeChanged-Ereignis, das NodeChanging-Ereignis, das NodeInserted-Ereignis, das NodeInserting-Ereignis, das NodeRemoved-Ereignis und das NodeRemoving-Ereignis bereit.

XmlNodeList

Stellt eine geordnete Auflistung von Knoten dar.

XmlNodeReader

Stellt einen Reader dar, der schnellen, nicht zwischengespeicherten Vorwärtszugriff auf XML-Daten in einem XmlNode bietet.

XmlNotation

Stellt eine Notationsdeklaration dar, z.B. <!NOTATION... >.

XmlParserContext

Stellt sämtliche Kontextinformationen bereit, die von XmlReader für das Analysieren eines XML-Fragments benötigt werden.

XmlProcessingInstruction

Stellt eine Verarbeitungsanweisung dar, die in XML definiert wird, um prozessorspezifische Informationen im Text des Dokuments beizubehalten.

XmlQualifiedName

Stellt einen qualifizierten XML-Namen dar.

XmlReader

Stellt einen Reader dar, der einen schnellen Zugriff auf XML-Daten bietet, ohne Zwischenspeicher und welcher nur vorwärts möglich ist.

XmlReaderSettings

Gibt eine Gruppe von Funktionen an, die für das XmlReader-Objekt unterstützt werden sollen, das von der Create-Methode erstellt wurde.

XmlResolver

Löst externe XML-Ressourcen auf, die durch einen URI (Uniform Resource Identifier) benannt werden.

XmlSecureResolver

Schützt eine andere Implementierung von XmlResolver, indem das XmlResolver-Objekt umschlossen und der Zugriff auf die Ressourcen beschränkt wird, auf die der zugrunde liegende XmlResolver zugreifen kann.

XmlSignificantWhitespace

Stellt ein Leerzeichen zwischen Markup in einem Knoten mit gemischtem Inhalt oder ein Leerzeichen innerhalb eines xml:space= "preserve"-Bereichs dar. Dies wird auch als signifikantes Leerzeichen bezeichnet.

XmlText

Stellt den Textinhalt eines Elements oder Attributs dar.

XmlTextReader

Stellt einen Reader dar, der schnellen, nicht zwischengespeicherten Vorwärtszugriff auf XML-Daten bietet.

Ab .NET Framework 2.0 sollten Sie stattdessen die XmlReader-Klasse verwenden.

XmlTextWriter

Stellt einen Writer für die schnelle, nicht zwischengespeicherte Vorwärtsgenerierung von Streams oder Dateien dar, die XML-Daten gemäß den W3C-Empfehlungen zu XML (Extensible Markup Language), Version 1.0, und zu Namespaces in XML enthalten.

Ab .NET Framework 2.0 sollten Sie stattdessen die XmlWriter-Klasse verwenden.

XmlUrlResolver

Löst externe XML-Ressourcen auf, die durch einen URI (Uniform Resource Identifier) benannt werden.

XmlValidatingReader

Stellt einen Reader dar, der die Schemavalidierung für DTD (Dokumenttypdefinition), XDR (XML-Data Reduced)-Schemas und XSD (XML Schema Definition Language)-Schemas bereitstellt.

Diese Klasse ist veraltet. Ausgehend von .NET Framework 2.0 wird empfohlen, die XmlReaderSettings-Klasse und die Create-Methode zum Erstellen eines überprüfenden XML-Readers zu verwenden.

XmlWhitespace

Stellt Leerzeichen im Elementinhalt dar.

XmlWriter

Stellt einen Writer für die schnelle, vorwärts gerichtete Generierung von Streams oder Dateien mit XML-Daten ohne Zwischenspeicherung dar.

XmlWriterSettings

Gibt eine Gruppe von Funktionen an, die für das XmlWriter-Objekt unterstützt werden sollen, das von der Create-Methode erstellt wurde.

XmlXapResolver

Der XmlXapResolver-Typ wird verwendet, um Ressourcen im XAP-Paket der Silverlight-Anwendung aufzulösen.

Schnittstellen

IApplicationResourceStreamResolver

Stellt einen Anwendungsressourcen-Streamresolver dar.

IFragmentCapableXmlDictionaryWriter

Enthält Eigenschaften und Methoden, die die Verarbeitung von XML-Fragmenten ermöglichen, wenn sie von XmlDictionaryWriter implementiert werden.

IHasXmlNode

Ermöglicht einer Klasse die Rückgabe eines XmlNode aus dem aktuellen Kontext oder der aktuellen Position.

IStreamProvider

Stellt eine Schnittstelle, die von Klassen implementiert werden kann, die Streams bereitstellen.

IXmlBinaryReaderInitializer

Stellt Methoden zur erneuten Initialisierung eines binären Readers bereit, um ein neues Dokument zu lesen.

IXmlBinaryWriterInitializer

Gibt Implementierungsanforderungen für binäre XML-Writer an, die sich von dieser Schnittstelle ableiten.

IXmlDictionary

Eine interface, die den Vertrag definiert, den ein XML-Wörterbuch implementieren muss, um von XmlDictionaryReader-Implementierungen und XmlDictionaryWriter-Implementierungen genutzt zu werden.

IXmlLineInfo

Stellt eine Schnittstelle bereit, die einer Klasse die Rückgabe von Zeilen- und Positionsinformationen ermöglicht.

IXmlMtomReaderInitializer

Gibt Implementierungsanforderungen für XML-MTOM-Reader an, die sich von dieser Schnittstelle ableiten.

IXmlMtomWriterInitializer

Wenn die Schnittstelle von einem MTOM-Writer implementiert wird, wird durch sie die Initialisierung für einen MTOM-Writer sichergestellt.

IXmlNamespaceResolver

Stellt den schreibgeschützten Zugriff auf eine Gruppe von Präfix- und Namespacezuordnungen bereit.

IXmlTextReaderInitializer

Gibt Implementierungsanforderungen für XML-Textreader an, die sich von dieser Schnittstelle ableiten.

IXmlTextWriterInitializer

Gibt Implementierungsanforderungen für XML-Textwriter an, die sich von dieser Schnittstelle ableiten.

Enumerationen

ConformanceLevel

Gibt den Umfang der Eingabe- oder Ausgabeüberprüfung an, die von dem XmlReader-Objekt und dem XmlWriter-Objekt ausgeführt wird.

DtdProcessing

Gibt die Optionen für die DTD-Verarbeitung an. Die DtdProcessing-Enumeration wird von der XmlReaderSettings-Klasse verwendet.

EntityHandling

Gibt an, wie der XmlTextReader oder XmlValidatingReader Entitäten behandelt.

Formatting

Gibt Formatierungsoptionen für den XmlTextWriter an.

NamespaceHandling

Gibt an, ob doppelte Namespacedeklarationen im XmlWriter entfernt werden sollen.

NewLineHandling

Gibt an, wie Zeilenumbrüche behandelt werden sollen.

ReadState

Gibt den Zustand des Readers an.

ValidationType

Gibt die Art der durchzuführenden Validierung an.

WhitespaceHandling

Gibt an, wie Leerraum behandelt wird.

WriteState

Gibt den Zustand des XmlWriter an.

XmlDateTimeSerializationMode

Gibt an, wie der Wert für die Uhrzeit beim Konvertieren zwischen einer Zeichenfolge und DateTime behandelt werden soll.

XmlDictionaryReaderQuotaTypes

Enthält konfigurierbare Kontingentwerte für XmlDictionaryReader.

XmlNamespaceScope

Definiert den Gültigkeitsbereich des Namespace.

XmlNodeChangedAction

Gibt den Typ der Knotenänderung an.

XmlNodeOrder

Beschreibt die Dokumentreihenfolge eines Knotens im Vergleich zu einem anderen Knoten.

XmlNodeType

Gibt die Art des Knotens an.

XmlOutputMethod

Gibt die Methode zum Serialisieren der XmlWriter-Ausgabe an.

XmlSpace

Gibt den aktuellen xml:space-Bereich an.

XmlTokenizedType

Stellt den XML-Typ für die Zeichenfolge dar. Dies ermöglicht das Lesen der Zeichenfolge als bestimmten XML-Typ, z. B. als CDATA-Abschnittstyp.

Delegaten

OnXmlDictionaryReaderClose

delegate für eine Rückrufmethode beim Schließen des Readers.

XmlNodeChangedEventHandler

Stellt die Methode dar, die das NodeChanged-Ereignis, das NodeChanging-Ereignis, das NodeInserted-Ereignis, das NodeInserting-Ereignis, das NodeRemoved-Ereignis und das NodeRemoving-Ereignis behandelt.

Hinweise

Unterstützte Standards

Der System.Xml Namespace unterstützt die folgenden Standards:

Im Abschnitt Unterschiede zu den W3C-Spezifikationen finden Sie zwei Fälle, in denen sich die XML-Klassen von den W3C-Empfehlungen unterscheiden.

.NET stellt auch andere Namespaces für XML-bezogene Vorgänge bereit. Eine Liste, Beschreibungen und Links finden Sie unterSystem.Xml Namespaces.

asynchrone Verarbeitung von XML

Die System.Xml.XmlReader Klassen und 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 problemlos zu asynchronem Code migrieren.

  • Verwenden Sie die asynchronen Methoden in Apps, bei denen eine erhebliche Netzwerkdatenstromlatenz besteht. Vermeiden Sie die Verwendung der asynchronen APIs für Lese-/Schreibvorgänge im Arbeitsspeicherstream oder lokalen Dateistream. Der Eingabestream , XmlTextReaderund XmlTextWriter sollte ebenfalls 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, die await Schlüsselwort (keyword) zu verwenden oder eine synchrone API zu verwenden, bei der eine asynchrone API erforderlich ist.

  • Legen Sie das XmlReaderSettings.Async Flag oder XmlWriterSettings.Async nicht auf fest true , wenn Sie keine asynchrone Methode verwenden möchten.

  • Wenn Sie vergessen, die await Schlüsselwort (keyword) anzugeben, wenn Sie eine asynchrone Methode aufrufen, sind die Ergebnisse nicht deterministisch: Sie erhalten möglicherweise das erwartete Ergebnis oder eine Ausnahme.

  • Wenn ein XmlReader Objekt einen großen Textknoten liest, kann es nur einen teiligen Textwert zwischenspeichern und den Textknoten zurückgeben, sodass das Abrufen der XmlReader.Value Eigenschaft möglicherweise 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 das Blockieren eines E/A-Vorgangs zu vermeiden.

Unterschiede zu den W3C-Spezifikationen

In zwei Fällen, die Einschränkungen für Modellgruppenschemakomponenten beinhalten, 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 Substitutionsgruppen nicht die "Schemakomponenteneinschränkung: Elementdeklarationen konsistent", die im Abschnitt Einschränkungen für Modellgruppenschemakomponenten der W3C-Spezifikation beschrieben wird.

Das folgende Schema enthält beispielsweise Elemente, die denselben Namen, aber unterschiedliche Typen im gleichen Inhaltsmodell haben, und Ersetzungsgruppen werden verwendet. Dies sollte zu einem Fehler führen, System.Xml kompiliert und validiert das Schema jedoch ohne Fehler.

<?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 Sequenz von Elementen. Aufgrund der Ersetzung kann der Verweis auf das Element e1 aus der Sequenz als Ergebnis entweder das Element e1 des Typs t1 oder das Element e2 des Typs t2 haben. Der letztere Fall würde zu einer Sequenz von zwei e2 Elementen führen, wobei eines vom Typ t2 und das andere vom Typ xs:intist.

Eindeutige Partikelzuordnung:

Unter den folgenden Bedingungen erfüllt die System.Xml Implementierung nicht die "Schemakomponenteneinschränkung: Eindeutige Partikelzuordnung", die im Abschnitt Einschränkungen für Modellgruppenschemakomponenten der W3C-Spezifikation beschrieben wird.

  • Eines der Elemente in der Gruppe verweist auf ein anderes Element.

  • Das Element, auf das verwiesen wird, ist ein Anfangselement einer Ersetzungsgruppe.

  • Die Ersetzungsgruppe enthält ein Element, das denselben Namen wie eines der Elemente in der Gruppe hat.

  • Die Kardinalität des Elements, das auf das Substitutionsgruppenkopfelement und das Element mit demselben Namen wie ein Substitutionsgruppenelement verweist, ist nicht festgelegt (minOccurs < maxOccurs).

  • Die Definition des Elements, das auf die Ersetzungsgruppe verweist, geht der Definition des Elements mit demselben Namen wie ein Substitutionsgruppenelement voran.

So ist das Inhaltsmodell im unten aufgeführten Schema nicht eindeutig und sollte zu einem Kompilierungsfehler führen; System.Xml kompiliert das Schema jedoch ohne Fehler.

<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>

zu

<xs:sequence>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

Hier sehen Sie 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: "Nicht behandelte Ausnahme: System.Xml. Schema.XmlSchemaValidationException: Das 'e2' el-Element ist ungültig – Der Wert 'abc' ist gemäß seinem Datentyp 'http://www.w3.org/2001/XMLSchema:int' ungültig . Die Zeichenfolge 'abc' ist kein gültiger Int32-Wert."

<e3><e2>abc</e2></e3>

Sicherheitshinweise

Die Typen und Member im System.Xml Namespace basieren auf dem .NET-Sicherheitssystem. In den folgenden Abschnitten werden Sicherheitsprobleme erläutert, die für XML-Technologien spezifisch sind.

Beachten Sie außerdem: Wenn Sie die System.Xml Typen und Member verwenden, müssen Sie, wenn der XML-Code Daten enthält, die potenzielle Auswirkungen auf den Datenschutz haben, Ihre App so implementieren, dass die Privatsphäre Ihrer Endbenutzer respektiert wird.

Externer Zugriff

Einige XML-Technologien können bei der Verarbeitung andere Dokumente abrufen. In dem gerade analysierten Dokument kann sich z. B. eine DTD (Document Type Definition) befinden. Die DTD kann sich auch in einem externen Dokument befinden, auf das in dem gerade analysierten Dokument verwiesen wird. Die XSD- und XSLT-Technologien können auch Informationen aus anderen Dateien verwenden. Diese externen Ressourcen können einige Sicherheitsbedenken darstellen. Beispielsweise sollten Sie 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 zum Laden von XML-Dokumenten und zum Auflösen externer Ressourcen wie Entitäten, DTDs oder Schemas sowie zum Importieren oder Einschließen von Anweisungen verwendet.

Sie können diese Klasse überschreiben und das XmlResolver zu verwendende Objekt angeben. Verwenden Sie die XmlSecureResolver-Klasse, wenn Sie eine Ressource öffnen möchten, die nicht von Ihnen gesteuert wird oder die nicht vertrauenswürdig ist. Der XmlSecureResolver umschließt einen XmlResolver und ermöglicht das Einschränken der Ressourcen, auf die der zu Grunde liegende XmlResolver Zugriff hat.

Denial of Service

Die folgenden Szenarios gelten als weniger empfindlich für Denial-of-Service-Angriffe, da die System.Xml-Klassen Schutz vor diesen Angriffen bieten.

  • Analysieren von XML-Textdaten.

  • Analysieren binärer XML-Daten, wenn die binären XML-Daten von Microsoft SQL Server generiert wurden.

  • Schreiben von XML-Dokumenten und -Fragmenten aus Datenquellen in ein Dateisystem, einen Stream, einen TextWriter oder einen StringBuilder.

  • Laden von Dokumenten in das DOM-Objekt (Document Object Model), wenn ein XmlReader-Objekt verwendet wird und XmlReaderSettings.DtdProcessing auf DtdProcessing.Prohibit festgelegt ist.

  • Navigieren im DOM-Objekt.

Die folgenden Szenarios sind nicht zu empfehlen, wenn Sie Denial-of-Service-Angriffe befürchten oder wenn Sie in einer nicht vertrauenswürdigen Umgebung arbeiten.

  • DTD-Verarbeitung.

  • Schema-Verarbeitung. Dazu gehört das Hinzufügen eines nicht vertrauenswürdigen Schemas zur Schemaauflistung, das Kompilieren eines nicht vertrauenswürdigen Schemas und das Validieren mit einem nicht vertrauenswürdigen Schema.

  • XSLT-Verarbeitung.

  • Analysieren eines beliebigen Streams von binären XML-Daten eines Benutzers

  • DOM-Operationen wie Abfragen, Bearbeiten, Verschieben von Unterstrukturen zwischen Dokumenten und Speichern von DOM-Objekten.

Wenn Sie Sich um Denial-of-Service-Probleme sorgen oder mit nicht vertrauenswürdigen Quellen zu tun haben, aktivieren Sie die DTD-Verarbeitung nicht. Dies ist standardmäßig für XmlReader Objekte deaktiviert, die von der XmlReader.Create -Methode erstellt werden.

Hinweis

Beim XmlTextReader ist die DTD-Verarbeitung standardmäßig aktiviert. Diese Funktion kann mit der XmlTextReader.DtdProcessing-Eigenschaft deaktiviert werden.

Wenn Sie die DTD-Verarbeitung aktiviert haben, können Sie die XmlSecureResolver -Klasse verwenden, um die Ressourcen einzuschränken, auf die der XmlReader zugreifen kann. Sie können Ihre App auch so entwerfen, dass die XML-Verarbeitung arbeitsspeicher- und zeitlimitiert ist. Beispielsweise können Sie Timeoutlimits in Ihrer ASP.NET-App konfigurieren.

Überlegungen zur Verarbeitung

Da XML-Dokumente Verweise auf andere Dateien enthalten können, ist es schwierig, den für die Analyse eines XML-Dokuments erforderlichen Verarbeitungsaufwand zu ermitteln. XML-Dokumente können z B. eine DTD enthalten. Wenn die DTD verschachtelte Entitäten oder komplexe Inhaltsmodelle umfasst, kann die Analyse des Dokuments außerordentlich viel Zeit beanspruchen.

Bei der Verwendung von XmlReader können Sie die Größe des zu analysierenden Dokuments mit der XmlReaderSettings.MaxCharactersInDocument-Eigenschaft begrenzen. Sie können die Anzahl von Zeichen einschränken, die sich durch das Erweitern von Entitäten ergeben, indem Sie die XmlReaderSettings.MaxCharactersFromEntities-Eigenschaft einrichten. Beispiele für das Einrichten dieser Eigenschaften finden Sie in den entsprechenden Referenzthemen.

Die XSD- und die XSLT-Technologien weisen weitere Funktionen auf, die die Verarbeitungsgeschwindigkeit beeinflussen können. Es ist z. B. möglich, ein XML-Schema zu erstellen, dessen Verarbeitung bereits bei der Auswertung für ein relativ kleines Dokument erhebliche Zeit in Anspruch nimmt. Es ist auch möglich, in einen XSLT-Stylesheet Skriptblöcke einzubetten. Beide Fälle stellen eine potenzielle Sicherheitsbedrohung für Ihre App dar.

Beim Erstellen einer App, die die XslCompiledTransform -Klasse verwendet, sollten Sie die folgenden Elemente und deren Auswirkungen beachten:

  • Die XSLT-Skriptverarbeitung ist standardmäßig deaktiviert. XSLT-Skripts sollten nur aktiviert werden, wenn eine Skriptunterstützung erforderlich ist und Sie mit einer vollständig vertrauenswürdigen Umgebung arbeiten.

  • Die XSLT-document()-Funktion ist standardmäßig deaktiviert. Wenn Sie die document()-Funktion aktivieren, schränken Sie die verfügbaren Ressourcen ein, indem Sie der XmlSecureResolver-Methode ein XslCompiledTransform.Transform-Objekt übergeben.

  • Erweiterungsobjekte sind standardmäßig aktiviert. Wenn der XsltArgumentList-Methode ein XslCompiledTransform.Transform-Objekt übergeben wird, das Erweiterungsobjekte enthält, so werden diese verwendet.

  • XSLT-Stylesheets können Verweise auf andere Dateien und eingebettete Skriptblöcke enthalten. Ein böswilliger Benutzer kann dies ausnutzen, indem er Daten oder Stylesheets bereitstellt, deren Verarbeitung die Ressourcen des Computers erschöpft.

  • XSLT-Apps, die in einer gemischten Vertrauensumgebung ausgeführt werden, können zu Stylesheet-Spoofing führen. Ein böswilliger Benutzer könnte z. B. ein Objekt mit einem schädlichen Stylesheet laden und es an einen anderen Benutzer übermitteln, der die XslCompiledTransform.Transform-Methode aufruft und die Transformation ausführt.

Diese Sicherheitsprobleme können durch Deaktivieren von Skripts oder der document()-Funktion bei aus nicht vertrauenswürdigen Quellen stammenden Stylesheets und durch das Abweisen von XslCompiledTransform-Objekten, XSLT-Stylesheets und XML-Quelldaten aus nicht vertrauernswürdigen Quellen reduziert werden.

Ausnahmebehandlung

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 abfangen und entsprechend verarbeiten.

Weitere Informationen