Kontrola homografů IDN

Dva názvy mohou být napsány různými znaky a přesto se číst stejně. apple.com a аpple.com — kde první písmeno je azbučné malé a — jsou pro síť různé názvy a pro čtenáře stejné slovo. Tato stránka rozebere název a řekne, o který z těchto dvou jde: rozdělí název na štítky, dekóduje každý štítek xn-- zpět na znaky, které nese, spočítá bajty proti limitům DNS, pojmenuje každý zaměnitelný znak spolu s písmem, které si půjčuje, a složí celý název na tvar, který napodobuje. Hlásí, co našla i co nenašla, se stejnou podrobností, takže čistý výsledek znamená, že kontroly proběhly a prošly, ne že se nic nekontrolovalo.
Veškeré zpracování probíhá lokálně ve vašem prohlížeči — název, který napíšete, se nikdy nenahrává a nikdy se nerozlišuje.

Jste v tom noví? Homografy IDN vysvětlené prostou češtinou — co dělá punycode a co nedělá, proč prohlížeč někdy ukazuje xn-- a proč je tato stránka sadou kontrol, a ne verdiktem.
Číst vstup jako: Nejprve složit název do NFC
ČTE SE JAKO —
FORMA DNS (co dostane resolver) —
VELIKOST —
Zatím nic nekontrolováno. Napište nebo vložte název výše — vždy jeden název — nebo stiskněte Načíst příklad. Stránka přečte holý název, název vytržený z URL nebo celou URL a řekne vám, co vzala. Každá kontrola, kterou provádí, je uvedena pod výsledkem, včetně těch, které nic nenašly.
Co je homograf IDN?
Homograf je slovo napsané jedním způsobem a čtené jiným. V názvu domény stačí často jeden znak: apple.com je sedm latinských písmen, zatímco аpple.com začíná znakem U+0430, azbučním malým písmenem a, které je vykresleno ve stejném tvaru v každém písmu, které máte. Pro síť jsou to dva různé názvy. Pro vaše oko je to stejné slovo a jen jeden z nich patří Applu.

Názvy byly první dvě desetiletí DNS jen ASCII, proto se o nich všechno měří v bajtech a písmenech: štítky z písmen, číslic a pomlček, nejvýše 63 bajtů každý, nejvýše 255 bajtů celkem. Mezinárodní název domény (IDN) je to, co nastane, když se pravidla otevřou zbytku Unicode, a punycode (RFC 3492) je pravidlo zápisu, které drží starý mechanismus v chodu: štítek obsahující cokoli mimo ASCII se zapíše jako štítek xn--, řetězec ASCII nesoucí tytéž znaky ve složené podobě. 中文.com putuje jako xn--fiq228c.com a oba zápisy pojmenují tutéž stanici.

Podstatné je, co punycode nedělá. Převádí pravopis a nic dalšího. Nemá názor na to, zda by se аpple.com mělo vedle apple.com smět objevit, a nelze se ho na to zeptat, protože ta otázka se týká očí a písem, ne bajtů. Registr rozhoduje, které znaky bude prodávat, prohlížeč rozhoduje, jak zobrazí název, který považuje za bezpečný, a čtenář rozhoduje, zda klikne. Tato stránka odpovídá na otázku pod všemi třemi: z jakých znaků se tento název skutečně skládá a co z něj dělá, že hláskuje?

Případy, proti kterým je tato stránka testována

Každý řádek níže spouští tato stránka při načtení a znovu tlačítko Samotest, a stránka musí přesně hlásit to, co řádek tvrdí — stejné nálezy, stejnou úroveň, stejnou formu DNS, stejný počet bajtů, ani víc, ani méně. Právě to dělá čistou odpověď zde něčím cenným: cesta kódu, která propustí běžný název, je táž, která chytí triky níže.

Jaký je případ Úroveň Název tak, jak přichází Co musí stránka hlásit

Jak tato stránka rozhoduje
  1. Vyjměte název z toho, co jste vložili. Holý název se použije tak, jak je; z URL se vyjme hostitel a schéma, port, cesta a dotaz se zahodí a stránka řekne, které z těchto dvou udělala, místo aby tiše analyzovala lomítko, jako by bylo součástí názvu.
  2. Vyčistěte jej tak, jak by to udělal klient. Řídicí znaky, znaky nulové šířky a značka pořadí bajtů se zahodí, plnošířková nebo ideografická tečka se počítá jako tečka a koncová tečka je kořen, nikoli chyba. Každý znak odstraněný nebo znovu interpretovaný tímto způsobem se hlásí, protože tichá zahozená mezera nulové šířky je přesně to, co potřebujete vědět.
  3. Rozdělte jej na štítky a změřte každý z nich. Štítek nesmí být prázdný, nesmí začínat nebo končit pomlčkou ani nést dvě pomlčky na třetí a čtvrté pozici, pokud není štítkem xn--. Každý štítek se měří v bajtech UTF-8 proti stropu 63 bajtů a celý název proti 255.
  4. Dekódujte každý štítek xn-- zpět na jeho znaky. Dekódovaný štítek se pak zakóduje ještě jednou a porovná s tím, co jste napsali. Štítek, který toto kolo nepřežije, není tím štítkem, za který se vydává, a ten, který se dekóduje na řídicí znak nebo na nic, se takto hlásí, místo aby byl tiše zahozen.
  5. Zeptejte se, čím je každý znak. Jeho kódový bod, jeho bajty UTF-8, písmo, do kterého patří, zda je v skupině znaků, které vypadají stejně, a kdo jsou ostatní členové této skupiny. Tady přestává azbučné a být „písmenem“ a stává se „písmenem, které vypadá jako latinské“.
  6. Složte název na tvar, který napodobuje. Každý zaměnitelný znak se nahradí znakem, který připomíná, takže аpple.com se promění v apple.com. Toto složené čtení je nejužitečnější řádek na stránce, protože apple.com je něco, na co můžete reagovat, kdežto „azbučné a“ ne.
  7. Nasbírejte nálezy a nahlaste nejhorší. Nálezy se hlásí jednou pro každý, s štítky, ve kterých se vyskytují. Název, který jen vypadá nezvykle, vytváří poznámky, nikoli nálezy: smíšení písem Han a Kana nebo koncová tečka kořene je běžný text, ne důvod k obavám.

Úrovně a co tvrdí

žádná nic tady nestálo za zmínku — nízká tentýž název napsaný podruhé — střední znak, který DNS nepřenese, nebo takový, který se složí na prosté písmeno — vysoká název sestavený tak, aby byl čten jako jiný název, nebo takový, který nelze vůbec odeslat.

Úroveň je nejhorší věc, kterou by nálezy mohly znamenat, nikoli pravděpodobnost ani úsudek o webu. Naprosto poctivý název může být střední, protože obsahuje jeden znak mimo abecedu názvů hostitelů, a nepřátelský může být vysoký jen s azbučným písmenem. Seznam pod úrovní řekne proč, jeden řádek na nález, a právě tento seznam stojí za přečtení.

Kontroly, které provádí jednu po druhé

Tabulka níže je postavena ze stejného seznamu, z něhož stránka hlásí, takže řádek zde a nález ve výsledku si nemohou odporovat. Kontrola, která nic nenašla, je uvedena jako ne: smyslem tabulky je vidět, že se otázka položila a byla zodpovězena, místo abyste přemýšleli, zda vůbec padla.

Kontrola Nejhorší, co může znamenat Co hledá

Stejný seznam řídí poznámky, které nemají vůbec žádnou úroveň: jeden štítek bez tečky, koncová tečka kořene, doména nejvyšší úrovně, která není ASCII, oddělovač jiný než tečka, jméno psané velkými písmeny, znaky odstraněné při čištění a URL zredukovaná na hostitele.

Limity, které DNS vynucuje

Název je seznam štítků a každý z nich se počítá v bajtech, ne ve znacích. Právě tento rozdíl je důvodem, proč punycode existuje: 中文 jsou dva znaky a šest bajtů a jeho tvar xn-- má patnáct znaků, takže se musí vejít zakódovaný zápis. Stránka uplatňuje oba stropy a hlásí, který z nich jste zasáhli.

Limit Hodnota Co se děje na okraji
Proč prohlížeč někdy ukazuje xn--

Možná jste si všimli, že název napsaný čínsky nebo azbukou se ve vašem adresním řádku někdy objeví jako nesmyslné xn-- místo znaků, které čekáte. To je prohlížeč, který odmítá zobrazit hezkou podobu, ne web, který by se nezaregistroval. Prohlížeč použije vlastní pravidlo na název, který dosud nikdy neviděl, a to pravidlo existuje ze stejného důvodu, kvůli kterému existuje celá tato stránka: zobrazit аpple.com jako аpple.com je přesně to, co útočník chce, takže neznámý název se smíšeným písmem se ukáže v zakódovaném zápisu, dokud nebyl viděn dostatečně často, aby mu šlo důvěřovat.

Kde se název objevuje Co se zobrazí Proč

Co tato stránka nedělá
Jde o sadu kontrol, ne o verdikt a ne o seznam blokovaných webů. Hlásí, z čeho se název skládá; nemá žádnou představu, co web dělá. Název může projít všemi zde uvedenými kontrolami a přesto být phishingová stránka, a název může být označen jako smíšené písmo a být zcela běžnou webovou stránkou patřící někomu, kdo píše ve svém vlastním jazyce. Skupiny tvarů jsou ručně psaná podmnožina zaměnitelných znaků z UTS #39, takže dvojici znaků, kterou tato stránka nezná, nenahlásí. A nic zde se nerozlišuje, nestahuje ani nevyhledává: název, který zadáte, nikdy neopustí prohlížeč, což také znamená, že stránka nemůže vědět, zda název existuje.
Odkud pravidla pocházejí

Punycode je RFC 3492 a samotest této stránky spouští jako první kontrolu jedenáct vzorových štítků uvedených v tomto dokumentu, takže kodér zde je držen příklady ze standardu, ne sám sebou. Pravidla zpracování, kterými IDN prochází, jsou RFC 5891 se znakovými tabulkami RFC 5892, a vrstva kompatibility, kterou prohlížeče skutečně uplatňují, je UTS #46 s příznakem non-transitional; tato stránka vám říká, co tato pravidla dělají, a netváří se, že je implementuje, a skládání, které uplatňuje — NFC, pak malá písmena, pak RFC 3492 — je táž krátká posloupnost, kterou klient provede dřív, než název odešle. Skupiny tvarů, rozsahy písem a tabulky neviditelných znaků v této rodině stránek byly napsány ručně pro rodinu: standardy jsou pojmenovány, abyste si je mohli přečíst sami, a žádný text z nich zde není reprodukován.

Otázky

Je smíšený název vždy útok?

Ne, a považovat to tak by bylo špatně způsobem, na kterém záleží. Japonština píše znaky Han a Kana ve stejném slově a korejština píše znaky Han uvnitř hangulu. Bez obyčejného vysvětlení je latinka smíšená s azbukou nebo řečtinou v jednom štítku, protože tato písma se spolu v žádném jazyce nepoužívají, a stránka tuto hranici vede, místo aby označila každou směs. Proto řádky pro japonštinu a korejštinu v tabulce případů výše vycházejí čistě.

Proč tedy můj vlastní název vychází jako střední?

Nejspíš proto, že obsahuje jeden znak, který abeceda názvů hostitelů nezahrnuje — podtržítko, mezeru, akcent zapsaný jako kompatibilní znak — a to je střední, protože název nelze odeslat tak, jak je. Střední znamená „tohle chce pohled“, ne „tohle je padělek“. Nález pod úrovní pojmenuje přesný znak a jeho pozici.

Řekne mi stránka, zda je název nebezpečný, registrovaný nebo dosažitelný?

Ne, u všech tří. Nikdy se nedotkne sítě a nic nerozlišuje, takže nemůže vědět, zda název existuje, ani kdo jej vlastní, a záměrně nic neříká o tom, co web dělá. Odpovídá na užší otázku, kterou si můžete ověřit sami: z jakých znaků se tento název skládá, a když složím zaměnitelné znaky na písmena, která napodobují, co to hláská?

Můj název je v čínštině a stránka říká, že doména nejvyšší úrovně není ASCII. Něco není v pořádku?

Nic není v nepořádku. Čínská doména nejvyšší úrovně putuje jako vlastní štítek xn--, takže poslední štítek názvu je zapsán ve svém zakódovaném tvaru a stránka to poznamenává. Poznámky nemají úroveň, protože popisují fakt, ne problém.

Proč řádek „čte se jako“ někdy ukazuje stejný název, jaký jste napsali?

Protože stránka ukáže složené čtení jen tehdy, když skládání něco skutečně změní. Pokud každý znak v názvu už má tvar, který napodobuje, jsou složené čtení a název stejný řetězec a není nic, co by vám bylo třeba říct.

Co je štítek A a štítek U?

Štítek A je ASCII zápis, který putuje: xn--fiq228c. Štítek U je tentýž štítek napsaný v písmu, do kterého patří: 中文. Jsou to dva zápisy jednoho štítku a stránka ukazuje oba u každého dekódovaného štítku, abyste viděli, co zakódovaný štítek skrývá.