Condividi tramite


Lettore XML

Il lettore XML è un cursore su un'origine di input di XML. Al suo centro, 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 di grandi dimensioni WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Pertanto, l'elaborazione di documenti di grandi dimensioni quando WS_XML_READER_PROPERTY_MAX_ATTRIBUTES è impostata su un valore elevato può presentare un'opportunità per un attacco denial of service.

Il lettore esegue 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 possono essere grandi come 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 garantisce che il documento segue la specifica grammaticale di xml e inoltre che i relativi aspetti siano all'interno delle 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 degli elementi e degli attributi e gli spazi dei nomi usando WsReadToStartElement, WsFindAttribute o controllando manualmente i nodi.

Alcune altre situazioni da considerare includono, ma non sono limitate a:

  • Gli elementi previsti potrebbero essere mancanti
  • Gli elementi imprevisti possono essere visualizzati
  • Gli attributi previsti potrebbero essere mancanti
  • Gli attributi imprevisti possono essere visualizzati
  • Gli elementi possono essere visualizzati come elementi vuoti
  • Lo spazio vuoto può essere visualizzato 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 su soley sul presupposto che alcuni elementi seguiranno sarebbero un potenziale vettore di attacco. L'utente del lettore in questo caso deve invece allocare in modo incrementale la memoria come 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:

L'handle seguente viene usato con i lettori XML:

Le strutture seguenti vengono usate con i lettori XML: