Lettore XML
Lettore XML è un cursore su un'origine di input di XML. Al suo interno, un lettore XML legge un nodo XML alla volta, ma sono disponibili API helper aggiuntive per semplificare la lettura di una sequenza di nodi.
Sono supportati i tipi di input dei lettori seguenti:
Sicurezza
Il lettore verificherà che gli attributi presenti in un elemento siano univoci. Il tempo necessario per eseguire questa convalida è una funzione del numero di attributi sull'elemento che può essere grande quanto WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Pertanto, l'elaborazione di documenti di grandi dimensioni quando WS_XML_READER_PROPERTY_MAX_ATTRIBUTES è impostato su un valore elevato può presentare un'opportunità per un attacco Denial of Service.
Il lettore eseguirà il mapping dei prefissi agli spazi dei nomi per ogni elemento e attributi. Il tempo necessario per eseguire questo mapping è una funzione del numero di attributi xmlns nell'ambito che può essere grande quanto WS_XML_READER_PROPERTY_MAX_NAMESPACES. Pertanto, l'elaborazione di documenti di grandi dimensioni quando questa proprietà è impostata su un valore elevato può presentare un'opportunità per un attacco Denial of Service.
Anche se il lettore garantirà che il documento segua la specifica grammaticale di xml e che i relativi aspetti siano entro le quote specificate, il contenuto del documento deve comunque essere considerato non attendibile quando proviene da un'origine non attendibile. Gli utenti del lettore devono controllare tutti i nomi e gli spazi dei nomi degli attributi e degli elementi usando WsReadToStartElement, WsFindAttributeo controllando manualmente i nodi .
Alcune altre situazioni da considerare includono, ma non sono limitate a:
- Gli elementi previsti potrebbero non essere presenti
- Potrebbero essere visualizzati elementi imprevisti
- Gli attributi previsti potrebbero non essere presenti
- Possono essere visualizzati attributi imprevisti
- Gli elementi possono essere visualizzati come elementi vuoti
- Gli spazi vuoti possono essere visualizzati in posizioni impreviste
Gli utenti del lettore non devono allocare memoria in base ai valori letti dal documento. Si consideri ad esempio il documento XML seguente:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
L'allocazione di una matrice basata sul presupposto che un certo numero di elementi seguirà sarebbe un potenziale vettore di attacco. L'utente del lettore in questo caso deve invece allocare in modo incrementale la memoria man mano che vengono visualizzati gli elementi.
Il lettore XML non supporta DTD. L'utente del lettore non deve preoccuparsi della verifica DTD.
Il callback seguente viene usato con i lettori XML:
Le enumerazioni seguenti vengono usate con i lettori XML:
Le funzioni seguenti vengono usate con i lettori XML:
- 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
L'handle seguente viene usato con i lettori XML:
Le strutture seguenti vengono usate con i lettori XML:
- 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