Partager via


lecteur XML

Le lecteur XML est un curseur sur une source d’entrée xml. À la base, un lecteur XML lit un nœud XML à la fois, mais il existe des API d’assistance supplémentaires pour faciliter la lecture d’une séquence de nœuds.

Les types d’entrée de lecteurs suivants sont pris en charge :

Sécurité

Le lecteur vérifie que les attributs présents sur un élément sont uniques. Le temps nécessaire pour effectuer cette validation dépend du nombre d’attributs sur l’élément qui peut être aussi grand que WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Par conséquent, le traitement de documents volumineux lorsque WS_XML_READER_PROPERTY_MAX_ATTRIBUTES est défini sur une valeur élevée peut présenter une opportunité d’attaque par déni de service.

Le lecteur mappe les préfixes aux espaces de noms pour chaque élément et attributs. Le temps nécessaire à l’exécution de ce mappage est fonction du nombre d’attributs xmlns dans l’étendue qui peut être aussi grand que WS_XML_READER_PROPERTY_MAX_NAMESPACES. Par conséquent, le traitement de documents volumineux lorsque cette propriété est définie sur une valeur élevée peut présenter une opportunité d’attaque par déni de service.

Bien que le lecteur s’assure que le document suit la spécification grammaticale de xml et que ses aspects se trouvent dans les quotas spécifiés, le contenu du document doit toujours être considéré comme non approuvé lorsqu’il provient d’une source non approuvée. Les utilisateurs du lecteur doivent case activée tous les noms et espaces de noms d’éléments et d’attributs à l’aide de WsReadToStartElement, WsFindAttribute ou en inspectant manuellement les nœuds.

Voici d’autres situations à prendre en compte , mais ne sont pas limitées à :

  • Les éléments attendus peuvent être manquants
  • Des éléments inattendus peuvent apparaître
  • Les attributs attendus peuvent être manquants
  • Des attributs inattendus peuvent apparaître
  • Les éléments peuvent apparaître sous forme d’éléments vides
  • Un espace blanc peut apparaître dans des endroits inattendus

Les utilisateurs du lecteur ne doivent pas allouer de mémoire en fonction simplement des valeurs lues à partir du document. Par exemple, considérez le document xml suivant :

<array count='1000000'>
   <!-- malicious document provider didn't actually provide 1000000 array items -->
</array>

L’allocation d’un tableau basé uniquement sur l’hypothèse qu’un certain nombre d’éléments suivront serait un vecteur d’attaque potentiel. Dans ce cas, l’utilisateur du lecteur doit allouer de manière incrémentielle la mémoire à mesure que les éléments apparaissent.

Le lecteur XML ne prend pas en charge DTD. L’utilisateur du lecteur n’a pas besoin de se soucier de la vérification DTD.

Le rappel suivant est utilisé avec les lecteurs XML :

Les énumérations suivantes sont utilisées avec les lecteurs XML :

Les fonctions suivantes sont utilisées avec les lecteurs XML :

Le handle suivant est utilisé avec les lecteurs XML :

Les structures suivantes sont utilisées avec les lecteurs XML :