Verificatore di omografi IDN

Due nomi possono essere scritti con caratteri diversi e tuttavia leggersi allo stesso modo. apple.com e аpple.com — dove quella prima lettera è la a minuscola cirillica — sono nomi diversi per la rete e la stessa parola per chi legge. Questa pagina scompone un nome e dice a quale dei due appartiene: divide il nome in etichette, decodifica ogni etichetta xn-- nei caratteri che contiene, conta i byte rispetto ai limiti DNS, nomina ogni carattere sosia insieme allo script che prende in prestito e riconduce l'intero nome alla forma che imita. Riporta ciò che trova e ciò che non trova con lo stesso livello di dettaglio, così una risposta pulita significa che i controlli sono stati eseguiti e superati, non che non è stato guardato nulla.
Tutta l'elaborazione avviene localmente nel suo browser — il nome che digita non viene mai caricato né risolto.

Nuovo a tutto questo? Gli omografi IDN spiegati in parole semplici — che cosa fa e che cosa non fa il punycode, perché un browser a volte mostra xn--, e perché questa pagina è un insieme di controlli e non un verdetto.
Leggi l'input come: Riconduci prima il nome a NFC
SI LEGGE COME —
FORMA DNS (che cosa riceve un resolver) —
DIMENSIONE —
Ancora nulla di verificato. Digiti o incolli un nome qui sopra — un nome alla volta — oppure prema Carica un esempio. La pagina legge un nome nudo, un nome estratto da un URL o un intero URL, e le dice quale ha scelto. Ogni controllo eseguito è elencato sotto il risultato, compresi quelli che non hanno trovato nulla.
Che cos'è un omografo IDN?
Un omografo è una parola scritta in un modo e letta in un altro. In un nome di dominio il trucco di solito costa un carattere: apple.com è composto da sette lettere latine, mentre аpple.com inizia con U+0430, la a minuscola cirillica, disegnata con la stessa forma in ogni font che possiede. Per la rete sono due nomi diversi. Per il Suo occhio sono la stessa parola, e solo uno dei due è di Apple.

Per i primi due decenni del DNS i nomi erano solo ASCII, ed è per questo che tutto ciò che li riguarda si misura in byte e lettere: etichette di lettere, cifre e trattini, al massimo 63 byte ciascuna, al massimo 255 byte in tutto. Un nome di dominio internazionalizzato (IDN) è ciò che accade quando le regole vengono aperte al resto di Unicode, e il punycode (RFC 3492) è la regola di scrittura che tiene in funzione il vecchio meccanismo: un'etichetta che contiene qualcosa al di fuori dell'ASCII viene scritta come etichetta xn--, una stringa ASCII che porta gli stessi caratteri in forma ridotta. 中文.com viaggia come xn--fiq228c.com, e entrambe le grafie indicano lo stesso host.

La parte che conta qui è ciò che il punycode non fa. Converte la grafia e nient'altro. Non ha un'opinione su se аpple.com debba essere ammesso accanto a apple.com, e non gli si potrebbe chiedere, perché quella domanda riguarda gli occhi e i font, non i byte. Il registro decide quali caratteri venderà, il browser decide come mostrerà un nome che considera sicuro, e chi legge decide se fare clic. Questa pagina risponde alla domanda sottostante a tutte e tre: di quali caratteri è fatto questo nome, e che cosa fa sembrare che scriva?

I casi con cui questa pagina viene verificata

Ogni riga qui sotto viene eseguita da questa pagina al caricamento e di nuovo dal pulsante Autotest, e la pagina deve riportare esattamente ciò che la riga dichiara — gli stessi risultati, lo stesso livello, la stessa forma DNS, lo stesso conteggio di byte, né più né meno. È questo che rende una risposta pulita qui di valore: il percorso del codice che lascia passare un nome normale è lo stesso che individua i trucchi qui sotto.

Che cos'è il caso Livello Nome come arriva Che cosa deve riportare la pagina

Come decide questa pagina
  1. Estrai il nome da ciò che hai incollato. Un nome nudo viene usato così com'è; a un URL viene estratto l'host e si scartano schema, porta, percorso e query, e la pagina dice quale dei due ha fatto invece di analizzare in silenzio una barra come se fosse parte di un nome.
  2. Puliscilo come lo farebbe un client. I caratteri di controllo, i caratteri a larghezza zero e il contrassegno di ordine dei byte vengono eliminati; un punto pieno o ideografico conta come punto, e un punto finale è la radice e non un errore. Ogni carattere rimosso o reinterpretato in questo modo viene segnalato, perché uno spazio a larghezza zero eliminato in silenzio è proprio ciò di cui devi essere informato.
  3. Dividilo in etichette e misura ciascuna. Un'etichetta non può essere vuota, non può iniziare o finire con un trattino, né avere due trattini nelle posizioni tre e quattro a meno che non sia un'etichetta xn--. Ogni etichetta si misura in byte UTF-8 rispetto al tetto di 63 byte, e l'intero nome rispetto a 255.
  4. Decodifica ogni etichetta xn-- nei suoi caratteri. L'etichetta decodificata viene poi codificata una seconda volta e confrontata con ciò che hai digitato. Un'etichetta che non sopravvive a questo ciclo non è l'etichetta che dichiara di essere, e una che si decodifica in un carattere di controllo o nel nulla viene segnalata come tale invece di essere scartata in silenzio.
  5. Chiedi che cosa è ogni carattere. Il suo punto di codice, i suoi byte UTF-8, lo script a cui appartiene, se si trova in un gruppo di caratteri disegnati allo stesso modo e quali sono gli altri membri di quel gruppo. È qui che una a cirillica smette di essere «una lettera» e diventa «una lettera con la forma di una latina».
  6. Riconduci il nome alla forma che imita. Ogni carattere sosia viene sostituito con il carattere a cui somiglia, il che trasforma аpple.com in apple.com. Quella lettura ridotta è la riga più utile della pagina, perché apple.com è qualcosa su cui puoi agire, mentre «una a cirillica» no.
  7. Raccogli i riscontri e riporta il peggiore. Ogni riscontro viene segnalato una sola volta, con le etichette in cui compare. Un nome che soltanto sembra insolito produce delle note invece di riscontri: mescolare Han e Kana, o terminare con il punto radice, è scrittura ordinaria e non un motivo di preoccupazione.

I livelli, e che cosa dichiarano

nessuno non c'era nulla degno di nota — basso lo stesso nome scritto in un secondo modo — medio un carattere che il DNS non trasporterà, oppure uno che si riduce a una lettera semplice — alto un nome costruito per essere letto come un altro nome, oppure uno che non può affatto essere inviato.

Un livello è la cosa peggiore che i riscontri potrebbero significare, non una probabilità né un giudizio sul sito. Un nome del tutto onesto può essere medio perché contiene un carattere fuori dall'alfabeto del nome host, e un nome ostile può essere alto con nulla di più sofisticato di una lettera cirillica. L'elenco sotto il livello dice perché, una riga per riscontro, ed è la parte che vale la pena leggere.

I controlli eseguiti, uno per uno

La tabella qui sotto è costruita dalla stessa lista da cui la pagina riporta, quindi una riga qui e un riscontro in un risultato non possono discordare. Un controllo che non ha trovato nulla è elencato come no: lo scopo della tabella è farti vedere che la domanda è stata posta e risolta, invece di chiederti se sia stata posta affatto.

Controllo Il peggio che può significare Che cosa cerca

La stessa lista alimenta le note, che non portano alcun livello: un'etichetta senza punti, un punto radice finale, un dominio di primo livello che non è ASCII, un separatore diverso dal punto, un nome in maiuscolo, caratteri rimossi durante la pulizia e un URL ridotto al suo host.

I limiti imposti dal DNS

Un nome è un elenco di etichette e ciascuna viene conteggiata in byte, non in caratteri. Questa distinzione è la ragione stessa per cui esiste il punycode: 中文 sono due caratteri e sei byte, e la sua forma xn-- è lunga quindici caratteri, quindi la grafia codificata è ciò che deve stare nel limite. La pagina applica entrambi i tetti e riporta quale dei due hai superato.

Limite Valore Che cosa succede al limite
Perché un browser a volte mostra xn--

Potrebbe aver notato che un nome scritto in cinese o in cirillico a volte compare nella barra degli indirizzi come una sequenza xn-- incomprensibile invece dei caratteri che si aspetta. È il browser che rifiuta di mostrare la forma leggibile, non il sito che non riesce a registrarla. Un browser applica una regola propria a un nome che non ha mai visto, e la regola esiste per la ragione per cui esiste l'intera pagina: mostrare аpple.com come аpple.com è esattamente ciò che un attaccante vuole, quindi un nome a script misto non familiare viene mostrato nella sua grafia codificata finché non è stato visto abbastanza spesso da essere considerato affidabile.

Dove compare il nome Che cosa viene mostrato Perché

Che cosa questa pagina non farà
Questo è un insieme di controlli, non un verdetto, e non una lista nera. Riporta di che cosa è fatto un nome; non ha idea di che cosa faccia il sito. Un nome può superare ogni controllo qui e restare comunque una pagina di phishing, e un nome può essere segnalato come nome a script misto ed essere un normalissimo sito web di qualcuno che scrive nella propria lingua. I gruppi di forma sono un sottoinsieme scritto a mano dei confondibili di UTS #39, quindi una coppia di caratteri che questa pagina non conosce non viene segnalata. E nulla qui viene risolto, scaricato o cercato: il nome che digiti non lascia mai il browser, il che significa anche che la pagina non può sapere se un nome esiste.
Da dove vengono le regole

Il punycode è la RFC 3492, e l'autotest di questa pagina esegue come primo controllo le undici etichette di esempio stampate in quel documento, così il codificatore qui è misurato sugli esempi dello standard e non su se stesso. Le regole di elaborazione a cui va incontro un IDN sono la RFC 5891 con le tabelle dei caratteri della RFC 5892, e il livello di compatibilità che i browser applicano davvero è la UTS #46 con il flag non transitorio; questa pagina spiega che cosa fanno quelle regole invece di fingere di implementarle, e la riduzione che applica — NFC poi minuscolo, poi RFC 3492 — è la stessa breve sequenza che un client esegue prima di inviare un nome. I gruppi di forma, gli intervalli di script e le tabelle dei caratteri invisibili di questa famiglia di pagine sono stati scritti a mano per la famiglia: gli standard sono citati perché Lei possa leggerli, e nessun loro testo è riprodotto qui.

Domande

Un nome a script misto è sempre un attacco?

No, e trattarlo così sarebbe sbagliato in un modo che conta. Il giapponese scrive caratteri Han e Kana nella stessa parola, e il coreano scrive caratteri Han all'interno dei caratteri Hangul. Non ha una spiegazione ordinaria ciò che mescola latino con cirillico o greco in una stessa etichetta, perché quegli script non si usano insieme in nessuna lingua, e la pagina traccia questa linea invece di segnalare ogni mescolanza. Ecco perché le righe giapponese e coreana nella tabella dei casi qui sopra risultano pulite.

Allora perché il mio nome risulta medio?

Molto probabilmente perché contiene un carattere che l'alfabeto del nome host non include — un trattino basso, uno spazio, un accento scritto come carattere di compatibilità — e questo è medio perché il nome non può essere inviato così com'è. Medio significa «va guardato», non «è un falso». Il riscontro sotto il livello indica il carattere esatto e la sua posizione.

La pagina mi dice se un nome è pericoloso, registrato o raggiungibile?

No, su tutti e tre. Non tocca mai la rete e non risolve mai nulla, quindi non può sapere se un nome esiste o chi ne sia il proprietario, e dice deliberatamente nulla su che cosa faccia un sito. Risponde a una domanda più ristretta che puoi verificare da solo: di quali caratteri è fatto questo nome, e se riconduco i sosia alle lettere che imitano, che cosa scrive?

Il mio nome è in cinese e la pagina dice che il dominio di primo livello non è ASCII. C'è qualcosa che non va?

Non c'è nulla che non va. Un dominio di primo livello cinese viaggia come un'etichetta xn-- propria, quindi l'ultima etichetta del nome è scritta nella sua forma codificata e la pagina lo segnala. Le note non portano alcun livello perché descrivono un fatto invece di un problema.

Perché la riga «si legge come» a volte mostra lo stesso nome che ho digitato?

Perché la pagina mostra una lettura ridotta solo quando la riduzione cambia davvero qualcosa. Se ogni carattere del nome è già la forma che imita, la lettura ridotta e il nome sono la stessa stringa e non c'è nulla da segnalare.

Che cos'è un'etichetta A e un'etichetta U?

Un'etichetta A è la grafia ASCII che viaggia: xn--fiq228c. Un'etichetta U è la stessa etichetta scritta nello script a cui appartiene: 中文. Sono due grafie di una stessa etichetta, e la pagina le mostra entrambe per ogni etichetta che decodifica, così puoi vedere che cosa nasconde un'etichetta codificata.