Leitor XML
XML Reader é um cursor sobre uma fonte de entrada de XML. Em sua essência, um leitor XML lê um de nó XML de cada vez, mas há APIs auxiliares adicionais para facilitar a leitura de uma sequência de nós.
Os seguintes tipos de entrada de leitores são suportados:
Segurança
O leitor verificará se os atributos presentes em um elemento são exclusivos. O tempo necessário para realizar 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, o processamento de documentos grandes quando WS_XML_READER_PROPERTY_MAX_ATTRIBUTES é definido como um valor grande pode representar 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 representar uma oportunidade para um ataque de negação de serviço.
Embora o leitor garanta que o documento segue a especificação gramatical do xml e, além disso, que seus aspetos estão dentro das cotas especificadas, o conteúdo do documento ainda deve ser considerado não confiável quando vem de uma fonte não confiável. Os usuários do leitor devem verificar todos os nomes de elementos e atributos e namespaces usando WsReadToStartElement, WsFindAttributeou inspecionando manualmente nós.
Algumas outras situações a considerar incluem, mas não estão limitadas a:
- Elementos esperados podem estar faltando
- Elementos inesperados podem aparecer
- Atributos esperados podem estar faltando
- Atributos inesperados podem aparecer
- Os elementos podem aparecer como elementos vazios
- 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 matriz baseada na suposição de que algum número de elementos seguirá seria um vetor de ataque potencial. O usuário do leitor, neste caso, deve, em vez disso, alocar incrementalmente a memória à medida que os elementos aparecem.
O leitor XML não suporta DTD. O usuário do leitor não precisa se preocupar com a verificação DTD.
O retorno de chamada a seguir é usado com leitores XML:
As enumerações a seguir 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