Partager via


Lecteur XML

Le lecteur XML est un curseur sur une source d’entrée XML. Au cœur, 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 est une fonction du nombre d’attributs sur l’élément pouvant être aussi volumineux 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 importante 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 pour effectuer ce mappage est une fonction du nombre d’attributs xmlns dans l’étendue qui peuvent être aussi volumineux 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 importante 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 du 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 vérifier tous les noms et 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 elles 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 en tant qu’éléments vides
  • Les espaces blancs peuvent apparaître dans des endroits inattendus

Les utilisateurs du lecteur ne doivent pas allouer de mémoire en fonction 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é sur une seule hypothèse selon laquelle un certain nombre d’éléments suivraient 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 s’inquiéter 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 :