Compartir a través de


Lector de XML

Lector XML es un cursor sobre un origen de entrada de XML. En su núcleo, un lector XML lee un nodo XML a la vez, pero hay API auxiliares adicionales para facilitar la lectura de una secuencia de nodos.

Se admiten los siguientes tipos de entrada de lectores:

Seguridad

El lector comprobará que los atributos presentes en un elemento son únicos. El tiempo necesario para realizar esta validación es una función del número de atributos del elemento que puede ser tan grande como WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Por lo tanto, el procesamiento de documentos grandes cuando WS_XML_READER_PROPERTY_MAX_ATTRIBUTES se establece en un valor grande puede presentar una oportunidad para un ataque por denegación de servicio.

El lector asignará prefijos a espacios de nombres para cada elemento y atributo. El tiempo necesario para realizar esta asignación es una función del número de atributos xmlns en el ámbito que puede ser tan grande como WS_XML_READER_PROPERTY_MAX_NAMESPACES. Por lo tanto, el procesamiento de documentos grandes cuando esta propiedad se establece en un valor grande puede presentar una oportunidad para un ataque por denegación de servicio.

Aunque el lector se asegurará de que el documento siga la especificación gramatical del xml y, además, de que sus aspectos estén dentro de las cuotas especificadas, el contenido del documento todavía debe considerarse que no es de confianza cuando procede de un origen que no es de confianza. Los usuarios del lector deben comprobar todos los nombres de elementos y atributos y espacios de nombres mediante WsReadToStartElement, WsFindAttribute o inspeccionando manualmente los nodos.

Algunas otras situaciones que se deben tener en cuenta incluyen, pero no se limitan a:

  • Es posible que falten elementos esperados
  • Es posible que aparezcan elementos inesperados
  • Es posible que falten atributos esperados
  • Pueden aparecer atributos inesperados
  • Los elementos pueden aparecer como elementos vacíos
  • El espacio en blanco puede aparecer en lugares inesperados

Los usuarios del lector no deben asignar memoria basándose simplemente en los valores leídos del documento. Por ejemplo, considere el siguiente documento xml:

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

Asignar una matriz basada en soley en la suposición de que algún número de elementos seguirá sería un vector de ataque potencial. En este caso, el usuario del lector debe asignar incrementalmente la memoria a medida que aparecen los elementos.

El lector XML no admite DTD. El usuario del lector no necesita preocuparse por la comprobación de DTD.

La devolución de llamada siguiente se usa con lectores XML:

Las enumeraciones siguientes se usan con lectores XML:

Las siguientes funciones se usan con lectores XML:

El identificador siguiente se usa con lectores XML:

Las estructuras siguientes se usan con lectores XML: