Freigeben über


System.Xml Namespace

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 abstract Klasse, von der die Windows Communication Foundation (WCF) von XmlReader der Serialisierung und Deserialisierung abgeleitet wird.

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 interface Vertrag, der den Vertrag definiert, den ein Xml-Wörterbuch implementieren muss, um von XmlDictionaryReader und XmlDictionaryWriter Implementierungen verwendet werden zu können.

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 xml:space Bereich an.

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

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

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:

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 await Schlü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 true fest, wenn Sie keine asynchrone Methode verwenden möchten.

  • Wenn Sie vergessen, das await Schlü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 die document() 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.

Weitere Informationen