Kā konvertēt internacionalizētus domēna vārdus, izmantojot Punycode
Punycode ir standartizēta kodēšanas metode, kas ļauj Unicode rakstzīmes attēlot, izmantojot ierobežotu ASCII rakstzīmju kopu, kas nozīmē, ka starptautiskajos domēnu vārdos (IDN) var iekļaut arī ne-ASCII rakstzīmes, piemēram, umlautus.
Kā tika izstrādāta šī kodēšanas metode?
2003. gadā Interneta inženierijas darba grupa (IETF) standartizēja Punycode kā sintaksi starptautisko domēnu vārdu kodēšanai lietojumprogrammās (IDNA). IETF definē domēna vārdu kā IDN, ja tas satur īpašus simbolus, piemēram, diakritiskos zīmes, burtus vai simbolus, kas nav sastopami latīņu alfabētā (piemēram, umlauti vācu valodā). Šādus simbolus nevar apstrādāt ar pamata protokoliem, piemēram, domēna vārdu sistēmu (DNS). Šajā piemērā izmantosim domēna vārdu vācu valodā. Lai gan pēc IDN ieviešanas vārds müller-büromöbel (Müllera biroja mēbeles) ir atļauts augstākā līmeņa domēnā .de, to var apstrādāt tikai, kodējot nebāzes rakstzīmes, piemēram, vārda atrisināšanas kontekstā. Daudzi interneta protokoli ir balstīti uz angļu valodu un tādēļ atbalsta tikai ierobežoto ASCII rakstzīmju kopu.
Lai nodrošinātu IDN saderību ar vecākiem interneta standartiem, IETF ir noteikusi metodi, kā kodēt internacionalizētus domēnu vārdus, izmantojot rakstzīmes, kas jau bija atļautas. Šī standartizētā kodēšanas procedūra ir pazīstama kā Punycode.
E-pasta adresēs Punycode tiek izmantots tikai starptautiskajiem e-pasta domēniem. Ja vietējā daļa (pirms simbolu @) satur ne-ASCII rakstzīmes, tā tiek kodēta, izmantojot UTF-8.
Kā darbojas Punycode kodēšana?
Punycode procesa pārskats
IETF RFC 3492 dokumentā Punycode ir definēts kā viens no vispārējā kodēšanas algoritma, kas pazīstams kā Bootstring, iespējamajiem pielietojumiem. Bootstring algoritms ļauj attēlot rakstzīmju virknes, kas sastāv no jebkādiem rakstzīmju kopumiem, izmantojot ierobežotu elementu klāstu. Kodēšanas metodes izstrāde balstās uz sešiem principiem. Punycode kodējumā šos elementus sauc par bāzes rakstzīmēm, kas sastāv no mazajiem burtiem, cipariem un defises (-). Kodēšanas metodes izstrāde balstās uz sešiem principiem.
- Pilnīgums: Katru izvades virkni var attēlot kā vienkāršotu virkni, izmantojot sākuma virkni.
- Unikalitāte: Izvades virknes piešķiršana attiecīgajai Bootstring kodējumam ir unikāla. Katram Punycode var piešķirt tieši vienu ASCII ekvivalentu un otrādi.
- Apgriežamība: Bootstring kodējumu var jebkurā brīdī atgriezt bez informācijas zuduma.
- Efektivitāte: Kodētā virkne ir – ja vispār – tikai nedaudz garāka par izvades virkni.
- Vienkāršība: Bootstring izmanto vienkāršus kodēšanas un dekodēšanas algoritmus.
- Lasāmība: tiek kodēti tikai tie simboli, kurus nevar attēlot mērķa simbolu kopā. Visi pārējie simboli paliek nemainīgi.
Punycode definē Bootstring atbilstoši starptautisko domēnu vārdu prasībām. Tas ļauj Unicode rakstzīmes pārveidot, izmantojot iepriekš atļautās bāzes rakstzīmes.
Punycode piemērs
Šis piemērs parāda, kā darbojas kodēšana:
IDN: müller-biroja mēbeles
IDN „müller-büromöbel“ satur burtus „ü“ un „ö“, kas nav iekļauti iepriekš atļautajā domēnu nosaukumu burtu kopā. Tāpēc, lai nodrošinātu saderību, tie ir jākodē, izmantojot Punycode.
1. solis: Normalizācija
Pirmajā posmā kodēšanas process nodrošina izvades rakstzīmju virknes normalizēšanu. Visas lielās burtu zīmes tiek aizstātas ar atbilstošajām mazajām burtu zīmēm.
2. solis: Visu ne-pamatburtiņu izņemšana
Otrajā posmā tiek izslēgti visi ne-pamatburti. Pēc tam tie tiek pievienoti domēna vārdam kodētā veidā un atdalīti ar defisi.
Ja interneta adrešu kodēšanai tiek izmantota Punycode sintakse, katrai rezultāta virknei tiek pievienots ACE prefikss (saīsinājums no ASCII-saderīgā kodējuma):
ACE prefikss: xn–
Priekšvārds „ACE” nodrošina, ka domēna vārdus, kuros ir defises, neuzskata par starptautiskiem domēna vārdiem.
Rezultātā IDN „müller-büromöbel“ tiek kodēts šādi:
ACE: xn–mller-brombel-rmb4fg
Punycode procedūras pamatā esošais algoritms ir ievērojams. Tas nodrošina, ka, neraugoties uz konvertēšanu, domēna nosaukumi nepārsniedz maksimālo garumu – 63 rakstzīmes.
Kodēšanas procesa laikā Unicode rakstzīmes netiek pārvērstas ASCII rakstzīmēs attiecībā 1:1. Tā vietā algoritms nosaka virkni, pamatojoties uz attālumu starp dzēstajām rakstzīmēm un rakstzīmju pozīciju izvades virknē.
Saistībā ar iepriekš parādīto piemēru teksta virkne „rmb4fg“ norāda, ka vārdam „mller-brombel“ otrajā un septītajā pozīcijā jāpievieno Unicode rakstzīmes „ü“ un „ö “.

Izņēmumi no noteikuma
Atkāpes rodas, ja domēna vārdā nav neviena bāzes rakstzīmes vai ja tajā ir tikai bāzes rakstzīmes.
Domēna vārdam, kurā ir tikai ne-bāzes rakstzīmes, pēc kodēšanas tiek parādīta tikai kodētā virkne un ACE prefikss. Domēna vārdam, piemēram, „παράδειγμα“ (grieķu valodā „piemērs“), atbilst šāda kodējuma:
IDN: piemērs
ACE: xn–hxajbheg2az3al
Ja domēna vārdā ir tikai standarta rakstzīmes, Punycode netiek izmantots. Tādējādi netiek pievienots nekāds ACE prefikss. Šajā gadījumā kodēšana nav nepieciešama, jo standarta interneta protokoli jau spēj atpazīt šo domēna vārdu.
Ja pilnībā kvalificēto domēna vārdu (FQDN) aplūko kā vienotu veselumu, katra daļa (augstākā līmeņa domēns, otrā līmeņa domēns, trešā līmeņa domēns utt.) tiek kodēta atsevišķi. Domēnspiemēram.bg (bulgāru valodā „example.bg“) varētu tikt kodēts šādi
IDN: piemērs.bg
ACE: xn–e1afmkfd.xn–90ae
Turpmākajā tabulā ir sniegts pārskats par dažādajiem Punycode sintakses variantiem.
| IDN | Punycode | ACE | |
|---|---|---|---|
| Bāzes un nebāzes rakstzīmes | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Tikai ne-bāzes rakstzīmes | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Tikai bāzes rakstzīmes | example.org
|
example.org
|
Nav lietderīgi |
Punycode algoritms ir sīki aprakstīts RFC 3492. Turklāt šajā dokumentā ir sniegta kodēšanas procedūras īstenošana programmēšanas valodā C.
Lietotāji parasti izmanto bezmaksas Punycode konvertētājus, lai kodētu starptautiskos domēnu vārdus.
Vājš kodējums ar emodži domēniem
Ar Punycode palīdzību var realizēt ne tikai internacionalizētus domēnu vārdus, bet arī emodži domēnus. Tomēr, lai tas darbotos, augstākā līmeņa domēnam ir jāatļauj emodžu izmantošana, un vēlamajam emodžim ir jāatbilst Unicode standartam.
Pašlaik šādos augstākā līmeņa domēnos ir iespējams reģistrēt domēnus ar emodžiem: .ws, .tk, .to, .ml, .ga, .cf, .gq un .fm.
Emoji domēni tehniski tiek apstrādāti kā Punycode, taču teorētiski lietotājam tie būtu jāparāda kā teksta un emocijzīmju kombinācija.
Emoji domēns: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Pašlaik praktiski neviena standarta pārlūkprogramma to neīsteno. Ja Firefox, Chrome, Safari, Edge vai Opera pārlūkprogrammā ievadāt emodži domēnu, adreses joslā tiek parādīta tikai ACE virkne.
Vai ir pieejami bezmaksas Punycode konvertētāji?
Dažādās tīmekļa vietnēs ir pieejami bezmaksas Punycode ģeneratori, kas pārvērš IDN adreses ASCII formātā. Viens no piemēriem ir Punycoder.

Citu augšējā līmeņa domēnu IDN gadījumā laba izvēle ir Mathias Bynens izstrādātais Punycode konvertētājs, kas balstās uz punycode.js.

Vai Punycode rada drošības risku?
Punycode kļūst par drošības risku homogrāfiskā pikšķerēšanas gadījumā – kiberuzbrukumos, kuros noziedznieki izmanto dažādu rakstzīmju vizuālo līdzību, lai pievilinātu neko nenojaušus upurus uz viltus tīmekļa vietnēm. Blogeris Xudong Zheng parāda, kā izskatās pikšķerēšanas uzbrukums, izmantojot par piemēru šādu Punycode domēnu: https://www.xn--80ak6aa92e.com/. Tas novirza interneta lietotājus uz tīmekļa vietni ar šādu IDN: https://www.аррӏе.com/
Norādītā URL adrese nav Kalifornijas tehnoloģiju uzņēmuma „Apple Inc.“ oficiālā tīmekļa vietne, bet gan pikšķerēšanas tīmekļa vietne, kas izveidota demonstrācijas nolūkos.
ASCII rakstzīmes „a“ (U+0061) vietā tiek izmantota kirilicā rakstītā „а“ (U+0430) – šīs divas rakstzīmes ar neapbruņotu aci gandrīz nav atšķiramas, taču tīmekļa pārlūki tās interpretē kā atšķirīgas rakstzīmes. Pat sertifikāti nespēj nodrošināt drošību, lai aizsargātu interneta lietotājus. Mūsdienu pikšķerēšanas kampaņās noziedznieki izveido derīgus SSL sertifikātus, lai padarītu savas tīmekļa vietnes autentiskas.
Pašreizējās „Chrome“ un „Opera“ versijas novērš šādus pikšķerēšanas uzbrukumus, IDN domēnos, kuros ir sajaukti dažādu rakstzīmju kopu simboli, parādot ACE virkni, nevis internacionalizēto domēna nosaukumu. „Internet Explorer“ un „Microsoft Edge“ neļauj piekļūt šādiem domēniem. Savukārt „Firefox“ nenodrošina nekādu aizsardzību pret Punycode pikšķerēšanu.

Tā Firefox lietotāji var sevi pasargāt. Lai samazinātu risku, ko rada pikšķerēšanas vietnes, Firefox lietotājiem pašlaik ir pieejama tikai iespēja vispār neļaut Punycode pārvērst IDN. Šim pagaidu risinājumam ir nepieciešami tikai divi soļi:
- Atveriet konfigurācijas redaktoru: ievadiet tīmekļa pārlūka adreses joslā about:config, lai atvērtu Firefox konfigurācijas redaktoru.
- Piespiediet Punycode: Atrodiet iestatījumu network.IDN_show_punycode un mainiet tā vērtību no false uz true.
Pēc konfigurēšanas Firefox adreses joslā starptautiskos domēnus attēlos kā ACE virknes.