Inspetor Unicode
Veja o que há de fato num texto: cada ponto de código com o seu nome, e os caracteres que se escondem ou enganam, de espaços de largura zero e controles bidirecionais do Trojan Source a letras cirílicas fingindo ser latinas. Consulte qualquer ponto de código, encontre um pelo nome, limpe um texto e escreva-o como escapes em oito linguagens.
Codificação e dadosRoda no seu navegador. Nada do que você cola sai da página.
50 pontos de código, 50 unidades UTF-16, 58 bytes UTF-8, 1 linha; 4 fora do ASCII.
4 pontos de código merecem atenção.
Controles bidirecionais deixados abertos
Linha 1: U+202E U+2066 ainda abertos no fim da linha. Tudo o que vem depois deles nessa linha pode ser exibido numa ordem diferente da ordem em que um compilador ou analisador o lê, que é o padrão do Trojan Source (CVE-2021-42574).
O que foi encontrado
- Controle bidirecional: 4Muda a ordem em que o texto ao redor é exibido. Texto da direita para a esquerda precisa dele; em código, pode fazer uma linha parecer diferente do que ela executa (UTS #55).
- Invisível: 4Default_Ignorable_Code_Point: onde não é suportado, simplesmente não é desenhado.
O texto, com cada caractere escondido à mostra
Cada caractere que merece atenção aparece como uma etiqueta com o seu ponto de código; passe o mouse ou o foco sobre ela para ver o nome.
Todos os pontos de código
| Posição | Linha:Col. | Car. | Ponto de código | Nome | Categoria | Escrita | Marcas |
|---|---|---|---|---|---|---|---|
| 0 | 1:1 | i | Ll | Latn | |||
| 1 | 1:2 | f | Ll | Latn | |||
| 2 | 1:3 | ␣ | Zs | Zyyy | |||
| 3 | 1:4 | a | Ll | Latn | |||
| 4 | 1:5 | c | Ll | Latn | |||
| 5 | 1:6 | c | Ll | Latn | |||
| 6 | 1:7 | e | Ll | Latn | |||
| 7 | 1:8 | s | Ll | Latn | |||
| 8 | 1:9 | s | Ll | Latn | |||
| 9 | 1:10 | _ | Pc | Zyyy | |||
| 10 | 1:11 | l | Ll | Latn | |||
| 11 | 1:12 | e | Ll | Latn | |||
| 12 | 1:13 | v | Ll | Latn | |||
| 13 | 1:14 | e | Ll | Latn | |||
| 14 | 1:15 | l | Ll | Latn | |||
| 15 | 1:16 | ␣ | Zs | Zyyy | |||
| 16 | 1:17 | ! | Po | Zyyy | |||
| 17 | 1:18 | = | Sm | Zyyy | |||
| 18 | 1:19 | ␣ | Zs | Zyyy | |||
| 19 | 1:20 | " | Po | Zyyy | |||
| 20 | 1:21 | u | Ll | Latn | |||
| 21 | 1:22 | s | Ll | Latn | |||
| 22 | 1:23 | e | Ll | Latn | |||
| 23 | 1:24 | r | Ll | Latn | |||
| 24 | 1:25 | - | RIGHT-TO-LEFT OVERRIDE | Cf | Zyyy | Controle bidirecional, Invisível | |
| 25 | 1:26 | ␣ | Zs | Zyyy | |||
| 26 | 1:27 | - | LEFT-TO-RIGHT ISOLATE | Cf | Zyyy | Controle bidirecional, Invisível | |
| 27 | 1:28 | / | Po | Zyyy | |||
| 28 | 1:29 | / | Po | Zyyy | |||
| 29 | 1:30 | ␣ | Zs | Zyyy | |||
| 30 | 1:31 | C | Lu | Latn | |||
| 31 | 1:32 | h | Ll | Latn | |||
| 32 | 1:33 | e | Ll | Latn | |||
| 33 | 1:34 | c | Ll | Latn | |||
| 34 | 1:35 | k | Ll | Latn | |||
| 35 | 1:36 | ␣ | Zs | Zyyy | |||
| 36 | 1:37 | i | Ll | Latn | |||
| 37 | 1:38 | f | Ll | Latn | |||
| 38 | 1:39 | ␣ | Zs | Zyyy | |||
| 39 | 1:40 | a | Ll | Latn | |||
| 40 | 1:41 | d | Ll | Latn | |||
| 41 | 1:42 | m | Ll | Latn | |||
| 42 | 1:43 | i | Ll | Latn | |||
| 43 | 1:44 | n | Ll | Latn | |||
| 44 | 1:45 | - | POP DIRECTIONAL ISOLATE | Cf | Zyyy | Controle bidirecional, Invisível | |
| 45 | 1:46 | ␣ | Zs | Zyyy | |||
| 46 | 1:47 | - | LEFT-TO-RIGHT ISOLATE | Cf | Zyyy | Controle bidirecional, Invisível | |
| 47 | 1:48 | " | Po | Zyyy | |||
| 48 | 1:49 | ␣ | Zs | Zyyy | |||
| 49 | 1:50 | { | Ps | Zyyy |
Cópia limpa
Escolha o que mudar. Trocar sósias também altera palavras legítimas de outras escritas, por isso vem desligado.
4 removidos, 0 espaços ou quebras de linha, 0 aspas ou traços, 0 sósias trocados.
if access_level != "user // Check if admin " {Escrever o texto como escapes
Todo caractere fora do ASCII imprimível vira escape, e os caracteres que cada linguagem reserva também. Cada forma foi decodificada de volta pela própria linguagem quando esta ferramenta foi construída.
if access_level != \"user\u202E \u2066// Check if admin\u2069 \u2066\" {Referências
- Unicode Character Database 18.0.0: UnicodeData.txt
- Unicode Character Database 18.0.0: PropList.txt
- Unicode Character Database 18.0.0: DerivedCoreProperties.txt
- Unicode Character Database 18.0.0: extracted/DerivedName.txt
- Unicode Character Database 18.0.0: NameAliases.txt
- Unicode Character Database 18.0.0: Blocks.txt
- Unicode Character Database 18.0.0: DerivedAge.txt
- Unicode Character Database 18.0.0: Scripts.txt and ScriptExtensions.txt
- Unicode Character Database 18.0.0: LineBreak.txt
- UTS #39 Unicode Security Mechanisms 18.0.0: confusables.txt
- Unicode Technical Standard #39: Unicode Security Mechanisms (version 18.0.0)
- Unicode Character Database 18.0.0: PropList.txt (Bidi_Control)
- Unicode Technical Standard #55: Unicode Source Code Handling (version 2)
- Unicode Standard Annex #9: Unicode Bidirectional Algorithm (Unicode 18.0.0)
- Unicode Standard Annex #44: Unicode Character Database (Unicode 18.0.0)
- The Unicode Standard 18.0.0, chapter 4: Character Properties
- NVD: CVE-2021-42574 (Trojan Source, bidirectional reordering in source code)
- RFC 3629: UTF-8, a transformation format of ISO 10646
- RFC 2781: UTF-16, an encoding of ISO 10646
- RFC 8259: JSON (section 7, strings)
- ECMA-262: ECMAScript Language Specification (string literals)
- The Python Language Reference: Lexical analysis (escape sequences)
- ISO/IEC 9899:2011 committee draft N1570 (C11): 6.4.3 universal character names
- Tcl 8.4 manual: Tcl (backslash substitution)
- WHATWG HTML Living Standard: named character references (entities.json)
- RFC 3986: URI Generic Syntax (percent-encoding)