IDN-homografitarkistin

Kaksi nimeä voidaan kirjoittaa eri merkeillä ja silti lukea samalla tavalla. apple.com ja аpple.com — jossa ensimmäinen kirjain on kyrillinen pieni a — ovat eri nimiä verkon kannalta ja sama sana lukijalle. Tämä sivu purkaa nimen osiin ja kertoo, kumpi näistä kahdesta se on: se jakaa nimen tunnisteisiin, purkaa jokaisen xn---tunnisteen takaisin merkeiksi, laskee tavut DNS-rajoja vastaan, nimeää jokaisen näennäisesti samanlaisen merkin yhdessä sen lainaaman kirjoitusjärjestelmän kanssa ja taittaa koko nimen takaisin muodolle, jota se jäljittelee. Se raportoi, mitä löytää ja mitä ei löydä, samalla yksityiskohtatasolla, joten puhdas vastaus tarkoittaa, että tarkistukset ajettiin ja läpäistiin, eikä sitä, ettei mitään tarkisteltu.
Kaikki käsittely tapahtuu paikallisesti selaimessasi — kirjoittamaasi nimeä ei ladata eikä sitä koskaan ratkaista.

Uusi aiheeseen? IDN-homografit selitettynä selkokielellä — mitä punycode tekee ja mitä ei, miksi selain joskus näyttää xn---merkintöjä ja miksi tämä sivu on joukko tarkistuksia eikä tuomio.
Lue syöte nimellä: Taita nimi ensin NFC:hen
LUETTAVISSA MUODOSSA —
DNS-MUOTO (mitä resolveri saa) —
KOKO —
Mitään ei ole vielä tarkistettu. Kirjoita tai liitä nimi yllä — yksi nimi kerrallaan — tai paina Lataa esimerkki. Sivu lukee paljaan nimen, URL-osoitteesta kopioidun nimen tai koko URL-osoitteen ja kertoo, mikä niistä otettiin. Jokainen suoritettu tarkistus on listattu tuloksen alla, myös ne, jotka eivät löytäneet mitään.
Mikä on IDN-homografi?
Homografi on sana, joka kirjoitetaan yhdellä tavalla ja luetaan toisella. Verkkotunnuksessa temppu maksaa yleensä yhden merkin: apple.com on seitsemän latinalaista kirjainta, kun taas аpple.com alkaa merkillä U+0430, kyrillisellä pienellä a-kirjaimella, joka piirtyy samanmuotoisena jokaisessa fontissa. Verkon kannalta nämä ovat kaksi eri nimeä. Silmällesi ne ovat sama sana, ja vain toinen niistä on Applen.

Nimet olivat ainoastaan ASCII ensimmäiset kaksi vuosikymmentä DNS:ää, minkä vuoksi kaikki niihin liittyvä mitataan tavuina ja kirjaimina: kirjainten, numeroiden ja väliviivojen tunnisteita, enintään 63 tavua kukin, enintään 255 tavua yhteensä. Kansainvälistetty verkkotunnus (IDN) on se, mitä tapahtuu, kun säännöt avataan muulle Unicodelle, ja punycode (RFC 3492) on kirjoitussääntö, joka pitää vanhan koneiston toimimassa: tunniste, joka sisältää mitä tahansa ASCII:n ulkopuolelta, kirjoitetaan xn---tunnisteena, ASCII-merkkijonona, joka kantaa samat merkit taitetussa muodossa. 中文.com kulkee muodossa xn--fiq228c.com, ja molemmat kirjoitusasut nimeävät saman isännän.

Olennainen asia täällä on se, mitä punycode ei tee. Se muuntaa kirjoitusasun, eikä mitään muuta. Sillä ei ole mielipidettä siitä, pitäisikö аpple.com:n saada olla apple.com:n vieressä, eikä sitä voitaisi kysyä, koska kysymys koskee silmiä ja fontteja eikä tavuja. Rekisteri päättää, mitä merkkejä se myy, selain päättää, miten se näyttää nimen, jonka se pitää turvallisena, ja lukija päättää, klikkaako. Tämä sivu vastaa kysymykseen, joka on näiden kolmen alla: mistä merkeistä tämä nimi todella koostuu, ja mitä se siitä kirjoittaa?

Tapaukset, joita tätä sivua vastaan testataan

Jokaisen alla olevan rivin ajaa tämä sivu latautuessaan ja uudelleen Itsetesti-painikkeella, ja sivun täytyy raportoida tarkalleen se, mitä rivi väittää — samat havainnot, sama taso, sama DNS-muoto, sama tavumäärä, ei enempää eikä vähempää. Juuri siksi puhdas vastaus tässä on arvokas: koodipolku, joka päästää tavallisen nimen läpi, on sama, joka pysäyttää alla olevat temput.

Mikä tapaus on kyseessä Taso Nimi saapuessaan Mitä sivun täytyy raportoida

Miten tämä sivu päättää
  1. Irrota nimi siitä, mitä liitit. Paljasta nimeä käytetään sellaisenaan; URL-osoitteesta otetaan isäntä ja skeema, portti, polku ja kysely pudotetaan, ja sivu kertoo, kumman se teki sen sijaan että analysoisi kauttaviivaa hiljaa osana nimeä.
  2. Puhdista se niin kuin asiakas tekisi. Ohjausmerkit, nollanleveyksiset merkit ja tavujärjestysmerkki poistetaan, täysleveä tai ideografinen täyspiste lasketaan pisteeksi, ja lopussa oleva piste on juuri (root) eikä virhe. Jokainen tällä tavoin poistettu tai uudelleentulkittu merkki raportoidaan, koska hiljaa pudotettu nollanleveyksinen välilyönti on juuri se asia, josta kuuluu kertoa.
  3. Jaa nimi tunnisteisiin ja mittaa jokainen. Tunniste ei saa olla tyhjä, alkaa tai päättyä väliviivaan, eikä sisältää kahta väliviivaa paikoissa kolme ja neljä, ellei se ole xn---tunniste. Jokainen tunniste mitataan UTF-8-tavuina 63 tavun katorajaa vastaan ja koko nimi 255:tä vastaan.
  4. Pura jokainen xn---tunniste takaisin merkeiksi. Puretut tunniste koodataan sitten toisen kerran ja verrataan kirjoitettuun. Tunniste, joka ei selviä tästä kierrosta, ei ole se tunniste, jota se väittää, ja tunniste, joka purkautuu ohjausmerkiksi tai ei mihinkään, raportoidaan sellaisena eikä sitä pudoteta hiljaa.
  5. Kysy, mikä jokainen merkki on. Sen koodipiste, sen UTF-8-tavut, kirjoitusjärjestelmä johon se kuuluu, kuuluuko se ryhmään merkkejä, jotka piirretään samalla tavalla, ja mitä ryhmän muut jäsenet ovat. Tästä kyrillinen a lakkaa olemasta "kirjain" ja muuttuu "kirjaimeksi, jonka muoto on latinalaisen kaltainen".
  6. Taita nimi jäljittelemänsä muotoon. Jokainen näennäisesti samanlainen merkki korvataan merkillä, jota se muistuttaa, mikä muuttaa аpple.com muotoon apple.com. Tämä taitettu lukutapa on sivun hyödyllisin rivi, koska apple.com on jotain, johon voi toimia, kun taas "kyrillinen a" ei ole.
  7. Kerää havainnot ja raportoi pahin. Havainnot raportoidaan kerran kukin, sekä niiden tunnisteet, joissa ne esiintyvät. Nimi, joka vain näyttää epätavalliselta, tuottaa huomautuksia eikä havaintoja: han- ja kana-merkkien sekoittuminen tai lopussa oleva juuripiste on tavallista kirjoitusta eikä syy huoleen.

Tasot ja niiden väitteet

ei mitään mitään tässä ei ollut mainitsemisen arvoista — matala sama nimi kirjoitettuna toisella tavalla — keskitaso merkki, jota DNS ei kanna, tai merkki, joka taittuu tavalliseksi kirjaimeksi — korkea nimi, joka on rakennettu luettavaksi eri nimenä, tai nimi, jota ei voi lähettää lainkaan.

Taso on pahin, mitä havainnot voivat tarkoittaa - ei todennäköisyys eikä arvio sivustosta. Täysin rehellinen nimi voi olla keskitasoa, koska se sisältää yhden merkin isäntänimen aakkoston ulkopuolelta, ja vihamielinen nimi voi olla korkea pelkällä kyrillisellä kirjaimella. Tason alla oleva luettelo kertoo syyn, yksi rivi havaintoa kohden, ja juuri se luettelo kannattaa lukea.

Tarkistukset yksi kerrallaan

Alla oleva taulukko on rakennettu samasta luettelosta, jolle sivu raportoi, joten tämän rivin ja tuloksen havainnon ei voi olla ristiriidassa. Tarkistus, joka ei löytänyt mitään, on listattu ei: taulukon tarkoitus on, että näet kysymyksen esitetyn ja vastatun, eikä sitä, oliko sitä koskaan kysytty.

Tarkistus Pahin mahdollinen merkitys Mitä se etsii

Sama luettelo ohjaa huomautuksia, joilla ei ole tasoa lainkaan: yksi tunniste ilman pistettä, lopussa oleva juuripiste, ylätason verkkotunnus, joka ei ole ASCII, muu erotin kuin piste, isot kirjaimet, siivouksessa poistetut merkit ja URL, joka supistettiin isännäksi.

DNS:n asettamat rajat

Nimi on luettelo tunnisteista, ja jokainen niistä lasketaan tavuina, ei merkkeinä. Tämä ero on koko syy, miksi punycode on olemassa: 中文 on kaksi merkkiä ja kuusi tavua, ja sen xn---muoto on viisitoista merkkiä, joten koodattu kirjoitusasu on se, jonka täytyy mahtua. Sivu soveltaa molempia katoja ja ilmoittaa, kumpaan osui.

Raja Arvo Mitä tapahtuu reunalla
Miksi selain näyttää joskus xn--

On ehkä huomannut, että kiinaksi tai kyrillisin kirjaimin kirjoitettu nimi näkyy joskus osoitepalkissa xn---sekamelskana sen sijaan, että näkisit odottamasi merkit. Se on selaimen kieltäytyminen näyttämästä kaunista muotoa, ei sivuston epäonnistuminen rekisteröidä sitä. Selain soveltaa omaa sääntöään nimeen, jota se ei ole ennen nähnyt, ja sääntö on olemassa samasta syystä kuin koko tämä sivu: аpple.com:n näyttäminen muodossa аpple.com on juuri se, mitä hyökkääjä haluaa, joten tuntematon sekakirjoitusjärjestelmän nimi näytetään koodatussa kirjoitusasussaan, kunnes se on nähty tarpeeksi usein luotettavaksi.

Missä nimi näkyy Mitä näytetään Miksi

Mitä tämä sivu ei tee
Tämä on joukko tarkistuksia, ei tuomio eikä estolista. Se raportoi, mistä nimi koostuu; sillä ei ole aavistustakaan siitä, mitä sivusto tekee. Nimi voi läpäistä jokaisen tarkistuksen täällä ja silti olla tietojenkalastelusivu, ja nimi voidaan merkitä sekakirjoitusjärjestelmän nimeksi ja olla silti aivan tavallinen verkkosivu jollekulle, joka kirjoittaa omalla kielellään. Muotoryhmät ovat käsin kirjoitettu osajoukko UTS #39:n sekaannusmerkeistä, joten merkkiparia, jota tämä sivu ei tunne, se ei raportoi. Eikä mitään täällä ratkaista, ladata tai haeta: kirjoittamasi nimi ei koskaan poistu selaimesta, mikä tarkoittaa myös, ettei sivu voi tietää, onko nimi olemassa.
Mistä säännöt tulevat

Punycode on RFC 3492, ja tämän sivun itsetesti ajaa asiakirjassa tulostetut yksitoista näytetunnistetta ensimmäisenä tarkistuksena, joten tämän sivun koodaaja on sidottu standardin esimerkkeihin eikä omaan tulokseensa. IDN:n käsittelysäännöt ovat RFC 5891 RFC 5892:n merkkitaulukoineen, ja yhteensopivuuskerros, jota selaimet todella soveltavat, on UTS #46 ei-transitiivisella lipulla; tämä sivu kertoo, mitä nämä säännöt tekevät sen sijaan, että esittäisi toteuttavansa niitä, ja taittaminen, jonka se soveltaa — NFC, sitten pienet kirjaimet, sitten RFC 3492 — on sama lyhyt sarja, jonka asiakas suorittaa ennen nimen lähettämistä. Muoto­ryhmät, kirjoitusjärjestelmien alueet ja näkymättömien merkkien taulukot tässä sivuperheessä on kirjoitettu käsin perheelle: standardit on nimetty, jotta voidaan lukea ne itse, eikä niiden tekstiä toisteta täällä.

Kysymykset

Onko sekakirjoitusjärjestelmän nimi aina hyökkäys?

Ei, ja sen pitäminen sellaisena olisi väärin tavalla, jolla on merkitystä. Japani kirjoittaa han-merkkejä ja kana-merkkejä samassa sanassa, ja korea kirjoittaa han-merkkejä hangul-merkkien sisällä. Se, mikä ei saa tavallista selitystä, on latina sekoitettuna kyrilliseen tai kreikkalaiseen kirjoitukseen yhdessä tunnisteessa, koska nämä kirjoitusjärjestelmät eivät ole käytössä yhdessä millään kielellä, ja sivu vetää tuon rajan sen sijaan, että merkitsisi jokaisen sekoituksen. Siksi japanin ja korean rivit yllä olevassa tapaustaulukossa palaavat puhtaina.

Miksi oma nimeni tulee sitten tulokseksi keskitaso?

Todennäköisimmin, koska se sisältää yhden merkin, jota isäntänimen aakkosto ei sisällä — alaviivan, välilyönnin, yhdistelmämerkin kirjoitettuna yhteensopivuusmerkkinä — ja se on keskitasoa, koska nimeä ei voi lähettää sellaisenaan. Keskitaso tarkoittaa "tämä tarvitsee vilkaisun", ei "tämä on väärennös". Tason alla oleva havainto nimeää tarkan merkin ja sen paikan.

Kertooko sivu, onko nimi vaarallinen, rekisteröity tai tavoitettavissa?

Ei, kaikkiin kolmeen. Se ei koskaan koske verkkoon eikä ratkaise mitään, joten se ei voi tietää, onko nimi olemassa tai kenen se on, ja se sanoo tarkoituksella ei mitään siitä, mitä sivusto tekee. Se vastaa kapeampaan kysymykseen, jonka voi tarkistaa itse: mistä merkeistä tämä nimi koostuu, ja jos taitan näennäisesti samanlaiset merkit kirjaimiin, joita ne jäljittelevät, mitä se kirjoittaa?

Nimeni on kiinaksi, ja sivu sanoo, ettei ylätason verkkotunnus ole ASCII. Onko jokin vialla?

Mikään ei ole vialla. Kiinalainen ylätason verkkotunnus kulkee omana xn---tunnisteenaan, joten nimen viimeinen tunniste on kirjoitettu koodatussa muodossaan, ja sivu huomauttaa siitä. Huomautuksilla ei ole tasoa, koska ne kuvaavat tosiasiaa eivätkä ongelmaa.

Miksi "luettavissa muodossa" -rivi näyttää joskus saman nimen, jonka kirjoitin?

Koska sivu näyttää taitetun lukutavan vain silloin, kun taittaminen oikeasti muuttaa jotain. Jos jokainen merkki nimessä on jo muoto, jota se jäljittelee, taitettu lukutapa ja nimi ovat sama merkkijono, eikä siitä ole mitään kerrottavaa.

Mikä on A-tunniste ja U-tunniste?

A-tunniste on ASCII-kirjoitusasu, joka kulkee verkossa: xn--fiq228c. U-tunniste on sama tunniste kirjoitettuna siinä kirjoitusjärjestelmässä, johon se kuuluu: 中文. Ne ovat kaksi kirjoitusasua samalle tunnisteelle, ja sivu näyttää molemmat jokaiselle purkamalleen tunnisteelle, jotta näet, mitä koodattu tunniste piilottaa.