Também disponível em: English · Español · Français · العربية
Caracteres parecidos: detecte homóglifos num texto
Quais caracteres do seu texto se passam por letras latinas, de que alfabeto vêm e se a defesa habitual os pegaria.
O que é um caractere parecido?
Um caractere parecido — um homóglifo — é um caractere de um alfabeto desenhado quase igual a outro de um alfabeto diferente. O а cirílico e o a latino são pontos de código distintos que a maioria das fontes desenha do mesmo jeito. Ponha um deles num nome de domínio e você tem um endereço que se lê certo e leva a outro lugar.
O Unicode publica a lista autorizada disso em confusables.txt, os dados por trás do relatório de segurança UTS 39. É esse arquivo que registradores e navegadores consultam ao decidir se dois nomes se parecem demais para coexistirem. Reduzido a caracteres únicos que substituem uma só letra latina, ele guarda 1.277 impostores espalhados por 43 alfabetos.
Esta página confere o seu texto contra essa tabela, nomeia cada impostor encontrado e diz o que quase nenhuma ferramenta diz: se a defesa padrão teria pegado.
Como usar
- Cole o texto. Um domínio, um nome de usuário, o nome de um pacote, um e-mail — qualquer coisa em que você está prestes a confiar. É conferido no seu navegador e nunca enviado.
- Leia o veredito. Você recebe a grafia latina para a qual o texto realmente se reduz e uma frase clara sobre se uma checagem de mistura de alfabetos teria objeção.
- E depois olhe a tabela. Cada impostor aparece com a posição, o ponto de código, o nome oficial do Unicode, o alfabeto de origem e a letra que imita.
O ataque leva o nome do cirílico e quase não é cirílico
O cirílico contribui com 43 dos 1.277 impostores e o grego com outros 38. A maior fonte, de longe, é o alfabeto que o Unicode chama de Common: 823 deles. É no Common que vivem os alfanuméricos matemáticos, junto das formas de largura total, das letras circundadas e de bastante coisa que não pertence a alfabeto nenhum.
E isso não é curiosidade, por causa de como a defesa habitual funciona. A checagem barata e quase universal é perguntar se uma cadeia mistura alfabetos, na lógica de que uma palavra latina de verdade não tem por que conter uma letra cirílica. O Unicode trata o Common como compatível com todos os alfabetos — símbolos matemáticos devem poder aparecer ao lado de qualquer idioma —, então um a matemático em negrito no meio de um texto latino não provoca objeção nenhuma.
Existe um segundo jeito de passar pela mesma checagem, e é dele que vem a fama do cirílico: escrever a palavra inteira num único alfabeto. Uma palavra escrita toda com caracteres cirílicos é perfeitamente coerente, então nada está misturado e a checagem não tem o que dizer. A ferramenta relata os dois casos explicitamente em vez de deixar você deduzir qual está vendo.
Duas letras que ninguém falsifica com um caractere só
Toda letra latina tem ao menos um impostor de um único caractere, exceto duas, e os motivos são diferentes — ambos registrados no próprio arquivo.
O I maiúsculo não tem nenhum porque não é um destino. O Unicode agrupa o I maiúsculo, o l minúsculo e o dígito 1 num único representante, então a tabela leva o I até o l e não o contrário: 79 caracteres apontam para o l minúsculo e nenhum para o I maiúsculo. O m minúsculo não tem nenhum porque o impostor dele não é um caractere: a tabela leva o m a rn, a sequência de duas letras que engana leitores desde muito antes de o Unicode existir.
Ou seja, as duas lacunas da lista são justamente os dois golpes famosos que funcionam por outro mecanismo. É um resultado bonito, e o gerador que constrói estes dados se recusa a emiti-los se um dia isso deixar de valer.
O que esta página não consegue dizer
Ela não diz que um texto é malicioso. Muitíssimos desses caracteres têm usos totalmente legítimos: alfanuméricos matemáticos pertencem à matemática, formas de largura total à composição japonesa, e um а cirílico numa palavra russa é simplesmente a letra a. O que a página relata é que um caractere não é a letra latina com que se parece, e isso é um fato, não uma acusação.
Ela também não checa o sentido inverso. O Unicode registra 2.103 caracteres cujo parecido é uma sequência em vez de um caractere só — o m por rn é o famoso — e esses são outra forma do problema, que uma varredura caractere a caractere não enxerga.
E ela trata apenas da aparência. Um texto ainda pode enganar por vias que nada têm a ver com o desenho dos caracteres, principalmente escondendo caracteres que não são desenhados de forma alguma. Essa é outra checagem, e há outra página neste site para ela.
Por que é grátis?
A tabela são alguns kilobytes que viajam com a página, e a checagem roda no seu navegador. Nada do que você cola é enviado, nada é registrado e não há conta a criar.
Sem cadastro, sem limites e sem marca d'água em nada que você copiar.