Detector de Caracteres Ocultos
Cole texto e o detector destaca cada caractere Unicode invisível que encontra — espaços de largura zero, joiners, marcas direcionais e hífens suaves — cada um rotulado com seu ponto de código.
Caracteres que esta ferramenta detecta
Os caracteres Unicode invisíveis comuns que o detector procura, com o que cada um realmente faz
Marca uma oportunidade de quebra de linha. Pode ser plantado dentro de um identificador para fazê-lo corresponder de forma diferente de como ele lê.
Evita a junção de caracteres em scripts cursivos como árabe e persa. Invisível, mas muda como os glifos adjacentes se conectam.
A cola nas sequências ZWJ de emoji — um emoji de família são quatro emojis unidos por três caracteres U+200D, renderizados como um único glifo.
Força a direção do texto da esquerda para a direita sem glifo visível. Legítimo em texto de direção mista; abusado em spoofing bidi.
Força a direção da direita para a esquerda. Mesmo uso duplo de U+200E — necessário para hebraico e árabe, usado como arma em phishing.
Invisível até uma linha quebrar naquela posição, quando renderiza como hífen. Costuma ser importado por acidente ao copiar de PDFs.
Por que caracteres invisíveis são um problema real
Caracteres Unicode invisíveis existem por motivos legítimos — controle de quebra de linha, junção de scripts cursivos, texto bidirecional, hifenização opcional. Mas como renderizam como nada, também são uma ferramenta de abuso. O paper Trojan Source (CVE-2021-42574, divulgado em outubro de 2021) mostrou que caracteres de override bidirecional podiam fazer código-fonte compilar de forma diferente do que aparece na tela. A divulgação complementar (CVE-2021-42694) cobriu ataques de homoglifos, onde um а cirílico (U+0430) substitui um a latino (U+0061) em um nome de função. Mais perto do uso cotidiano, caracteres de largura zero são colados em nomes de usuário e identificadores para fazer duas strings que parecem idênticas serem comparadas como diferentes. Um detector que expõe esses caracteres por ponto de código é a forma mais rápida de encontrá-los, porque eles não podem ser vistos a olho.
Para que isso é útil
Como deve ser uma varredura séria
Os seis caracteres listados acima são os mais comuns, mas não são o quadro completo. Uma varredura minuciosa cobre várias faixas. Os caracteres de formato de largura zero U+200B até U+200F cobrem oportunidades de quebra de linha, joiners e marcas direcionais. U+2060 (word joiner) e U+FEFF (marca de ordem de bytes, quando aparece no meio do fluxo) também são de largura zero. O bloco de override bidirecional — U+202A até U+202E, mais U+2066 até U+2069 — é o que o Trojan Source explora. U+00AD (hífen suave) é invisível até uma quebra. Os preenchedores Hangul U+115F e U+3164 e o braille em branco U+2800 renderizam como nada mas ocupam uma célula, o que os torna úteis para esconder conteúdo à vista de todos. Detecção de confundíveis é um problema relacionado mas separado: um а cirílico e um a latino são ambos visíveis, então um detector de caracteres não vai sinalizá-los. Para isso, você precisa de uma checagem contra os dados de confusables do Unicode, que mapeiam caracteres parecidos a um esqueleto normalizado.
Como usar o detector bem
Cole apenas o texto que você quer verificar. Tudo roda no seu navegador; nada é enviado.
Use a codificação por cores para distinguir tipos de caractere de relance — vermelho para ZWSP, verde para ZWJ, laranja para RLM, e assim por diante.
Depois de detectar, clique em Remover para eliminar todo caractere invisível, depois Copiar Texto Limpo para obter a versão saneada.
Confira qualquer nome de usuário, slug ou identificador que veio de input de usuário antes de armazenar ou comparar.
Se uma comparação de strings está falhando e as strings parecem idênticas, cole ambas aqui — um U+200B oculto é a causa mais comum.
Para código-fonte de terceiros, escaneie U+202A até U+202E antes de ler. Esses são os overrides bidi por trás do Trojan Source.
Como o detector funciona
O detector roda inteiramente no seu navegador como JavaScript. Nenhum texto sai do seu dispositivo, o que importa quando você está colando identificadores sensíveis ou código-fonte. Funciona no Chrome, Firefox, Safari, Edge e qualquer navegador moderno em desktop ou celular. Ele escaneia os caracteres de largura zero na faixa U+200B até U+200F, os overrides bidirecionais em U+202A até U+202E e U+2066 até U+2069, o word joiner U+2060, o hífen suave U+00AD e a marca de ordem de bytes U+FEFF quando ela aparece fora da primeira posição de um arquivo. Note que ele sinaliza caracteres invisíveis por ponto de código; ele não detecta homoglifos, que são caracteres visíveis que apenas parecem outros caracteres.
