Lector XML
Lector XML es un cursor sobre un origen de entrada de XML. En su núcleo, un lector XML lee una 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 garantizará que el documento siga la especificación gramatical del xml y, además, que sus aspectos se encuentren 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, WsFindAttributeo inspeccionando manualmente nodos.
Entre otras situaciones que se deben tener en cuenta se incluyen, pero no se limitan a:
- Es posible que falten elementos esperados
- Es posible que aparezcan elementos inesperados
- Es posible que falten atributos esperados
- Es posible que aparezcan atributos inesperados
- Los elementos pueden aparecer como elementos vacíos
- Es posible que el espacio en blanco aparezca en lugares inesperados.
Los usuarios del lector no deben asignar memoria basada simplemente en 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 suposición de que algunos elementos seguirán sería un vector de ataque potencial. El usuario del lector en este caso 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 funciones siguientes se usan con lectores XML:
- WsCreateReader
- WsFillReader
- WsFindAttribute
- WsFreeReader
- WsGetNamespaceFromPrefix
- WsGetReaderNode de
- WsGetReaderPosition
- WsGetReaderProperty
- WsGetXmlAttribute
- WsMoveReader
- WsReadArray
- WsReadBytes
- WsReadChars
- WsReadCharsUtf8
- WsReadEndAttribute
- WsReadEndElement
- WsReadNode
- WsReadQualifiedName
- WsReadStartAttribute
- WsReadStartElement
- WsReadToStartElement
- WsReadValue
- WsSetInput
- WsSetInputToBuffer
- WsSetReaderPosition
- WsSkipNode
El identificador siguiente se usa con lectores XML:
Las estructuras siguientes se usan con lectores 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