XML-Reader
DER XML-Reader ist ein Cursor auf eine Eingabequelle von XML. Im Kern liest ein XML-Reader jeweils einen XML-Knoten , aber es gibt zusätzliche Hilfs-APIs, um das Lesen einer Sequenz von Knoten zu erleichtern.
Die folgenden Typen von Lesereingaben werden unterstützt:
Der Leser überprüft, ob die für ein Element vorhandenen Attribute eindeutig sind. Die für diese Überprüfung erforderliche Zeit ist eine Funktion der Anzahl von Attributen für das Element, die so groß wie WS_XML_READER_PROPERTY_MAX_ATTRIBUTES sein kann. Daher kann die Verarbeitung großer Dokumente, wenn WS_XML_READER_PROPERTY_MAX_ATTRIBUTES auf einen großen Wert festgelegt ist, eine Möglichkeit für einen Denial-of-Service-Angriff darstellen.
Der Reader zuordnen Präfixe zu Namespaces für jedes Element und jedes Attribut. Die zum Durchführen dieser Zuordnung erforderliche Zeit ist eine Funktion der Anzahl von xmlns-Attributen im Bereich, die so groß wie WS_XML_READER_PROPERTY_MAX_NAMESPACES sein kann. Daher kann die Verarbeitung großer Dokumente, wenn diese Eigenschaft auf einen großen Wert festgelegt ist, eine Möglichkeit für einen Denial-of-Service-Angriff darstellen.
Während der Leser sicherstellt, dass das Dokument der grammatikalischen Spezifikation von xml folgt und dass seine Aspekte innerhalb der angegebenen Kontingente liegen, muss der Inhalt des Dokuments trotzdem als nicht vertrauenswürdig betrachtet werden, wenn es aus einer nicht vertrauenswürdigen Quelle stammt. Benutzer des Lesers sollten alle Element- und Attributnamen und Namespaces mithilfe von WsReadToStartElement, WsFindAttribute oder durch manuelle Überprüfung von Knoten überprüfen.
Einige andere Situationen, die in Betracht gezogen werden sollten, sind jedoch nicht beschränkt auf:
- Erwartete Elemente fehlen möglicherweise
- Unerwartete Elemente können angezeigt werden
- Erwartete Attribute fehlen möglicherweise
- Unerwartete Attribute können angezeigt werden
- Elemente können als leere Elemente angezeigt werden.
- Leerzeichen können an unerwarteten Stellen angezeigt werden
Benutzer des Lesegeräts sollten Arbeitsspeicher nicht einfach anhand von Werten zuweisen, die aus dem Dokument gelesen werden. Betrachten Sie beispielsweise das folgende XML-Dokument:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Die Zuordnung eines Arrays basierend auf der Annahme, dass eine bestimmte Anzahl von Elementen folgen wird, wäre ein potenzieller Angriffsvektor. Der Benutzer des Lesers sollte in diesem Fall stattdessen den Arbeitsspeicher inkrementell zuordnen, wenn die Elemente angezeigt werden.
DER XML-Reader unterstützt keine DTD. Der Benutzer des Lesers muss sich nicht um die DTD-Überprüfung kümmern.
Der folgende Rückruf wird mit XML-Readern verwendet:
Die folgenden Enumerationen werden mit XML-Readern verwendet:
Die folgenden Funktionen werden mit XML-Readern verwendet:
- WsCreateReader
- WsFillReader
- WsFindAttribute
- WsFreeReader
- WsGetNamespaceFromPrefix
- WsGetReaderNode
- WsGetReaderPosition
- WsGetReaderProperty
- WsGetXmlAttribute
- WsMoveReader
- WsReadArray
- WsReadBytes
- WsReadChars
- WsReadCharsUtf8
- WsReadEndAttribute
- WsReadEndElement
- WsReadNode
- WsReadQualifiedName
- WsReadStartAttribute
- WsReadStartElement
- WsReadToStartElement
- WsReadValue
- WsSetInput
- WsSetInputToBuffer
- WsSetReaderPosition
- WsSkipNode
Das folgende Handle wird mit XML-Readern verwendet:
Die folgenden Strukturen werden mit XML-Readern verwendet:
- WS_XML_READER_BINARY_ENCODING
- WS_XML_READER_BUFFER_INPUT
- WS_XML_READER_ENCODING
- WS_XML_READER_INPUT
- WS_XML_READER_MTOM_ENCODING
- WS_XML_READER_PROPERTIES
- WS_XML_READER_PROPERTY
- WS_XML_READER_STREAM_INPUT
- WS_XML_READER_TEXT_ENCODING