Compartilhar via


Leitor XML

O Leitor de XML é um cursor sobre uma fonte de entrada de XML. Em sua essência, um Leitor de XML lê uma nó XML de cada 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:

Segurança

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, processar 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 verificar 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
  • Os 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 nos 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 em soley na suposição de que alguns elementos seguirão seria um potencial vetor de ataque. O usuário do leitor nesse caso deve, em vez disso, alocar incrementalmente a memória conforme os elementos aparecem.

O leitor de XML não dá suporte ao 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 identificador a seguir é usado com leitores XML:

As estruturas a seguir são usadas com leitores XML: