Analisador de diferenças entre parsers de URL
Cole uma ou mais URLs (uma por linha) para detectar divergências entre o parser de URL do navegador/WHATWG e parsers antigos no estilo RFC 3986 usados em algumas linguagens de backend. Veja qual destino cada parser interpreta e por que isso pode ser um problema de segurança, não apenas de formatação.
O processamento é feito localmente no seu navegador. Seu arquivo nunca é enviado.
Como usar esta ferramenta ferramenta
- Cole uma URL ou um bloco com uma URL por linha; os dados não saem do navegador.
- Selecione ‘Analisar URLs’.
- Confira cada valor sinalizado: qual comportamento de análise diverge, quais parsers são afetados e por que isso importa.
- Use a reescrita sugerida quando disponível. Confusão com userinfo e hosts não ASCII ficam deliberadamente sem solução, pois adivinhar o host pretendido seria pior do que apontar a ambiguidade.
Premissas
- Cada linha não vazia é tratada como uma URL completa; a ferramenta não procura fragmentos parecidos com URL dentro de textos maiores. Várias verificações (espaços internos, posição de barras invertidas, userinfo) dependem de analisar a string inteira.
- Uma linha sem esquema (como ‘https:’) nem prefixo relativo a protocolo `//` é tratada como texto simples e ignorada, não como problema.
- O lado WHATWG de cada comparação usa o construtor `URL` real do navegador em que a ferramenta está sendo executada, não uma simulação. ‘Não afetado’ significa que essa entrada específica foi testada nele.
- O lado estrito/antigo RFC 3986 descreve comportamentos documentados de parsers antigos ou mais estritos; não é um segundo parser ativo. A ferramenta não executa código não confiável de outra linguagem para comparar.
Fontes e dados de referência
Metodologia
Cada URL candidata é verificada contra sete divergências independentes e documentadas entre a análise permissiva no estilo WHATWG e a análise mais estrita no estilo RFC 3986: normalização de barras invertidas, confusão entre userinfo e host, barras iniciais extras, hosts não ASCII/IDN, URLs relativas a protocolo sem esquema, espaços/caracteres de controle incorporados e espaços sem codificação. Só há reescrita quando é inequivocamente segura: normalizar barras invertidas, remover espaços excedentes, reduzir barras extras e codificar um espaço literal com porcentagem. Nunca reescreve automaticamente confusão com userinfo nem hosts não ASCII, pois não é possível saber qual host era pretendido.
Exemplo resolvido
Confusão com userinfo pelo caractere `@`
Dados de entrada: https://trusted.com@evil.com/
Resultado: O navegador interpreta tudo antes de `@` como userinfo e tudo depois como o host real: esta URL aponta para evil.com, não trusted.com. É sinalizada como erro; é um desvio clássico de código que verifica o destino por correspondência textual em vez de analisar a URL.
Barras invertidas no lugar de barras normais
Dados de entrada: https:\\example.com\path
Resultado: Navegadores normalizam barras invertidas para barras normais em esquemas especiais como https, então a URL é analisada como `https://example.com/path` no navegador. Muitos parsers fora do navegador não fazem essa normalização e podem interpretar outro host ou falhar. É sinalizada como erro e reescrita com segurança.
Barras iniciais extras
Dados de entrada: https:///example.com
Resultado: Três barras depois dos dois-pontos do esquema são tratadas de maneira inconsistente. É sinalizada como aviso e reescrita com segurança para a URL canônica `https://example.com`.
Host com aparência confiável dentro do userinfo
Dados de entrada: https://trusted.com@evil.com/
Resultado: Nesta URL, `trusted.com` é informação de usuário antes de `@`; o host é `evil.com`. Isso pode enganar verificações por substring que procuram um domínio confiável sem analisar a URL. O verificador analisa o texto e não acessa nem navega até o endereço.
Orientações práticas
- Nunca valide a confiança ou a origem de uma URL com correspondência textual (`url.startsWith(...)`, `url.includes(...)`): analise-a com uma biblioteca de URL real e confira o host resultante.
- Normalize barras invertidas antes que a URL chegue a um parser que não faça isso por conta própria. Trate uma barra invertida em uma URL como sinal de alerta, não como opção de formatação.
- Prefira um esquema explícito a uma URL relativa a protocolo quando mais de um sistema for analisá-la; nem todos os parsers aceitam um valor relativo sem uma base fornecida.
Erros comuns
- Presumir que uma URL aponta para um domínio confiável só porque ‘parece’ apontar: confusão com userinfo é projetada para enganar uma inspeção visual rápida ou uma busca por substring.
- Tratar uma URL analisada sem erro como prova de que foi interpretada corretamente: várias divergências (userinfo, barras invertidas, hosts não ASCII) são analisadas com sucesso, mas podem produzir hosts ou caminhos diferentes conforme o parser.
Perguntas frequentes
Por que confusão com userinfo é erro, mas host não ASCII é apenas aviso?
Confusão com userinfo é um desvio de segurança documentado e ativamente explorado, sem caso de uso legítimo comum com esse formato. Um host não ASCII muitas vezes é legítimo (um nome de domínio internacionalizado); o problema é a divergência entre parsers, não a suspeita sobre a URL em si.
Por que a ferramenta não abre nem normaliza a URL para verificar o host real?
A ferramenta nunca navega até uma URL colada, solicita o endereço nem o representa como link clicável. Faz apenas análise estática do texto no navegador, deliberadamente: uma ferramenta que ensina padrões de ataque por confusão de URL não deve se tornar um vetor de ataque.
Um resultado sem alertas significa que a URL é segura?
Significa que nenhuma das sete divergências específicas e documentadas verificadas foi encontrada. Não garante que seja seguro solicitar a URL nem que ela não seja maliciosa por outros motivos fora das diferenças entre parsers.
Última revisão:
Verificador de texto estático, não um segundo parser ativo: o lado estrito da RFC 3986 descreve comportamentos reais documentados, mas não executa uma biblioteca de URL de outra linguagem sobre a entrada. Também não resolve URLs relativas, segue redirecionamentos nem determina se uma URL é maliciosa além dos sete padrões indicados.
As preferências de tema e de ferramentas, além das listas de itens salvos e usados recentemente, são armazenadas somente neste navegador.