XML Reader
O Leitor de XML é um cursor sobre uma fonte de entrada de XML. Em sua essência, um Leitor de XML lê um nó XML por vez, mas há APIs auxiliares adicionais para facilitar a leitura de uma sequência de nós.
Há suporte para os seguintes tipos de entrada de leitores:
O leitor verificará se os atributos presentes em um elemento são exclusivos. O tempo necessário para executar essa validação é uma função do número de atributos no elemento que pode ser tão grande quanto WS_XML_READER_PROPERTY_MAX_ATTRIBUTES. Portanto, processar documentos grandes quando WS_XML_READER_PROPERTY_MAX_ATTRIBUTES é definido como um valor grande pode apresentar uma oportunidade para um ataque de negação de serviço.
O leitor mapeará prefixos para namespaces para cada elemento e atributos. O tempo necessário para executar esse mapeamento é uma função do número de atributos xmlns no escopo que pode ser tão grande quanto WS_XML_READER_PROPERTY_MAX_NAMESPACES. Portanto, o processamento de documentos grandes quando essa propriedade é definida como um valor grande pode apresentar uma oportunidade para um ataque de negação de serviço.
Embora o leitor garanta que o documento siga a especificação gramatical de xml e, além disso, que seus aspectos estejam dentro das cotas especificadas, o conteúdo do documento ainda deve ser considerado não confiável ao vir de uma fonte não confiável. Os usuários do leitor devem marcar todos os nomes e namespaces de elementos e atributos usando WsReadToStartElement, WsFindAttribute ou inspecionando manualmente nós.
Algumas outras situações a serem consideradas incluem, mas não se limitam a:
- Elementos esperados podem estar ausentes
- Elementos inesperados podem aparecer
- Atributos esperados podem estar ausentes
- Atributos inesperados podem aparecer
- Elementos podem aparecer como elementos vazios
- O espaço em branco pode aparecer em lugares inesperados
Os usuários do leitor não devem alocar memória com base simplesmente em valores lidos do documento. Por exemplo, considere o seguinte documento xml:
<array count='1000000'>
<!-- malicious document provider didn't actually provide 1000000 array items -->
</array>
Alocar uma soley baseada em matriz com base na suposição de que alguns elementos seguirão seria um vetor de ataque em potencial. O usuário do leitor nesse caso deve, em vez disso, alocar incrementalmente a memória à medida que os elementos aparecerem.
O leitor de XML não dá suporte a DTD. O usuário do leitor não precisa se preocupar com a verificação de DTD.
O retorno de chamada a seguir é usado com leitores XML:
As seguintes enumerações são usadas com leitores XML:
As seguintes funções são usadas com leitores XML:
- WsCreateReader
- WsFillReader
- WsFindAttribute
- WsFreeReader
- WsGetNamespaceFromPrefix
- WsGetReaderNode
- WsGetReaderPosition
- WsGetReaderProperty
- WsGetXmlAttribute
- WsMoveReader
- WsReadArray
- WsReadBytes
- WsReadChars
- WsReadCharsUtf8
- WsReadEndAttribute
- WsReadEndElement
- WsReadNode
- WsReadQualifiedName
- WsReadStartAttribute
- WsReadStartElement
- WsReadToStartElement
- WsReadValue
- WsSetInput
- WsSetInputToBuffer
- WsSetReaderPosition
- WsSkipNode
O seguinte identificador é usado com leitores XML:
As seguintes estruturas são usadas com leitores 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