# Decodificador XML

> Cole XML e leia sua estrutura: a declaração, o DOCTYPE e quaisquer entidades, a árvore de elementos com namespaces e atributos, mais uma verificação de segurança da superfície de ataque XML. Nada é buscado ou resolvido.

- Tool: https://ronutz.com/pt-BR/tools/xml-decoder
- Family: Segurança e WAF

---

## O que faz

Cole XML e a ferramenta o analisa em uma estrutura legível: a declaração XML, o DOCTYPE e quaisquer entidades que ele declare, e a árvore de elementos completa com seus namespaces e atributos, junto com CDATA, comentários e instruções de processamento. Ela verifica se o documento é bem-formado e roda uma análise de segurança da superfície de ataque do XML. Ela não busca nada e não resolve nada.

## O que ela mostra

O XML reúne vários tipos de nó em um documento, e a ferramenta os separa: a **declaração** com sua versão e codificação; o **DOCTYPE** e quaisquer **entidades** que ele define; a **árvore de elementos**, com os **namespaces** (as ligações `xmlns`) e os **atributos** mostrados por elemento; e as seções **CDATA**, os **comentários** e as **instruções de processamento**. Ela também verifica a boa formação no sentido do XML: que toda tag está fechada corretamente e que o documento tem exatamente um elemento raiz.

## A superfície de ataque do XML

O XML é poderoso de um jeito que o torna perigoso quando vem de uma fonte não confiável, e a análise de segurança da ferramenta sinaliza exatamente onde esse perigo mora:

- **Um DOCTYPE, para começar**, porque a definição de tipo de documento é o que habilita o resto;
- **Entidades externas**, que podem puxar um arquivo local ou uma URL e são o mecanismo dos ataques de XML External Entity (XXE);
- **Entidades de parâmetro**, uma forma usada para passar XXE por defesas ingênuas; e
- **Expansão de entidades**, o aninhamento por trás do ataque de negação de serviço billion laughs.

Ver essas coisas destacadas é o ponto: isso diz se um determinado documento está tentando fazer algo que um documento de dados simples nunca faria.

## Segura por construção

A ferramenta é um tokenizador de texto, não um processador de XML. Ela lê o documento como texto e descreve sua estrutura, e nunca resolve uma entidade, nunca abre uma referência externa e nunca expande nada. É isso que a permite analisar XML hostil com segurança: os próprios recursos sobre os quais ela avisa são descritos, não executados. Esta é a contraparte de propósito geral do decodificador SAML, que recusa uma DTD por completo porque uma mensagem SAML nunca legitimamente tem uma.

## Como usar

Cole um documento XML e leia sua declaração, DOCTYPE e entidades, árvore de elementos e os sinalizadores de segurança. A análise é determinística e local, então é seguro inspecionar XML de qualquer fonte.

## Standards and references

- [W3C - Extensible Markup Language (XML) 1.0](https://www.w3.org/TR/xml/)
- [W3C - Namespaces in XML 1.0](https://www.w3.org/TR/xml-names/)
- [OWASP - XML External Entity Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html)

## Related reading

- [Billion laughs e expansão de entidades](https://ronutz.com/pt-BR/learn/billion-laughs-and-entity-expansion.md): Entidades podem referenciar outras entidades, e se cada uma multiplica a anterior, um documento minúsculo pode expandir para gigabytes e exaurir a memória. O ataque billion laughs transforma isso em uma negação de serviço. A defesa é limitar a expansão ou recusar o DOCTYPE de imediato.
- [CDATA, comentários e instruções de processamento](https://ronutz.com/pt-BR/learn/cdata-comments-and-processing-instructions.md): Nem tudo em XML é um elemento. Seções CDATA guardam texto cru que de outra forma precisaria de escape, comentários anotam sem afetar o conteúdo, e instruções de processamento carregam direções para uma aplicação. Reconhecer estas três impede que pareçam ruído misterioso.
- [Lendo a estrutura do XML](https://ronutz.com/pt-BR/learn/reading-xml-structure.md): XML é uma árvore de elementos construída a partir de um punhado de partes: uma declaração opcional, elementos com atributos, texto e algumas construções especiais. Uma vez que você consegue nomear cada parte e ver como elas se aninham, ler um documento desconhecido de cima a baixo vira rotina em vez de um jogo de adivinhação.
- [Namespaces XML explicados](https://ronutz.com/pt-BR/learn/xml-namespaces-explained.md): Quando dois vocabulários XML usam o mesmo nome de elemento para coisas diferentes, namespaces os mantêm separados vinculando um prefixo a uma URI única. O prefixo é apenas um atalho local; a URI é a identidade real. Entender essa divisão resolve a maior parte da confusão com namespaces.
- [XML bem formado vs válido](https://ronutz.com/pt-BR/learn/xml-well-formedness.md): Boa formação é a linha de base do XML: uma raiz, tags aninhadas e correspondidas corretamente, atributos entre aspas e especiais escapados. Validade é uma afirmação mais forte e separada de que um documento também segue um schema. Um parser rejeita XML mal formado de imediato, que é por que estas regras vêm primeiro.
- [XXE e entidades externas](https://ronutz.com/pt-BR/learn/xxe-and-external-entities.md): XML permite que um documento declare entidades, e uma entidade externa pode apontar para um arquivo ou URL. Um parser que resolve uma pode ser enganado a ler arquivos locais ou fazer requisições no lado do servidor, a vulnerabilidade XXE. A correção é direta e eficaz: não processar um DOCTYPE de forma alguma.
