Sdílet prostřednictvím


Zpracování internationalizovaných názvů domén (IDN)

Toto téma popisuje, jak ve svých aplikacích pracovat s internationalizovanými názvy domén (IDN). Sítě IDN jsou určeny pracovní skupinou sítě RFC 3490: Internationalizing Domain Names in Applications (IDNA). Před tímto konceptem standardu byly názvy IDN omezeny na latinky bez diakritických znamének. IdNA umožňuje sítím IDN zahrnout znaky latinky s diakritikou a znaky z jiných než latinských skriptů, jako jsou cyrilice, arabština a čínština. Standard také stanoví pravidla pro mapování IDN na doménové názvy pouze v ASCII. Problémy s IDNA je proto možné zpracovat na straně klienta, aniž by se vyžadovaly změny názvového serveru domény (DNS).

Opatrnost

RFC 3490 zavádí řadu problémů zabezpečení souvisejících s používáním sítí IDN. Další informace naleznete v související části Aspekty zabezpečení: Mezinárodní funkce.

 

Poznámka

IDNA je v současné době založená na kódování Unicode 3.2.

 

Funkce rozhraní API služby NLS pro zpracování sítí IDN

Služba NLS obsahuje následující převodní funkce, které může vaše aplikace použít k převodu IDN na různé reprezentace. Příklad použití těchto funkcí naleznete v tématu NLS: Internationalized Domain Name (IDN) Conversion Sample.

  • idnToAscii. Převede IDN na punycode.
  • IdnToNameprepUnicode. Provede část převodu IDN pomocí NamePrep na ASCII název. Tato funkce vytvoří kanonickou Unicode reprezentaci řetězce.
  • IdnToUnicode. Převede řetězec punycode na normální řetězec UTF-16.

Služba NLS také definuje několik funkcí rozhraní API, které je možné použít ke zmírnění některých bezpečnostních rizik, která představuje technologie IDN. V systému Windows Vista a novějších se následující funkce používají k ověření, že znaky v daném IDN jsou kompletně odvozeny ze skriptů přidružených k určitému nebo k některým národním prostředím. Příklad použití těchto funkcí najdete v tématu NLS: Ukázka zmírnění rizik pro mezinárodní název domény (IDN).

U aplikací, které běží v systémech Windows XP a Windows Server 2003, mají funkce DownlevelGetLocaleScripts, DownlevelGetStringScriptsa DownlevelVerifyScripts hrát podobnou roli funkcí uvedeným výše při zmírnění rizika zabezpečení. Rozhraní API pro zmírnění "Microsoft Internationalized Domain Name (IDN) " ke stažení z archive.org.

Zpracování řetězců Unicode

IDNA podporuje transformaci řetězců Unicode na legitimní popisky názvů hostitelů, s výjimkou řetězců obsahujících určité zakázané znaky, jako jsou řídicí znaky, znaky z oblasti privátního použití (PUA) a podobně. Vaše aplikace může použít příznak IDN_USE_STD3_ASCII_RULES s několika funkcemi převodu NLS, aby funkce selhaly, pokud narazí na jiné znaky ASCII než písmena, číslice nebo znak pomlčky (-), nebo pokud řetězec začíná nebo končí znakem pomlčky. Tyto znaky byly vždy zakázány používat v názvech domén a zůstávají zakázány v konceptu standardu.

Zpracování nepřiřazených bodů kódu

Názvy IDN nemohou obsahovat nepřiřazené kódové body. Proto body kódů, které nejsou přidružené ke znakům (přiřazené) ve verzi Unicode 3.2, nemají definované mapování IDN, i když příznak IDN_ALLOW_UNASSIGNED v některých funkcích převodu umožňuje jejich mapování na Punycode. Seznam nepřiřazených bodů kódu najdete v RFC 3454.

Opatrnost

Pokud vaše aplikace kóduje nepřiřazené body kódu jako Punycode, výsledné názvy domén by měly být neplatné. Zabezpečení může být ohroženo, pokud novější verze IDNA umožní používání těchto názvů nebo pokud aplikace vyfiltruje neplatné znaky a pokusí se vytvořit legální název domény.

 

Nepřiřazené body kódu nejsou povoleny v uložených řetězcích používaných v identifikátorech protokolu a pojmenovaných entitách, jako jsou názvy v digitálních certifikátech a částech názvu domény DNS. Kódové body jsou však povoleny v řetězcích dotazu, například v uživateli zadaných jménech pro digitální certifikační autority a DNS dotazy, které se používají ke shodě s uloženými identifikátory.

Opatrnost

I když řetězce dotazů můžou používat nepřiřazené body kódu, neměli byste je ve svých aplikacích používat. I řetězec dotazu zadaný uživatelem představuje riziko útoku na falšování identity. V tomto typu útoku neseriózní hostitelský web přesměrovává uživatele ze stránky, k níž chtějí přistoupit, na jinou stránku, která může třetí straně poskytnout citlivé informace. Například kopírování řetězce z příchozích e-mailů může představovat stejná rizika jako kliknutí na odkaz v prohlížeči.

 

Převod názvů domén na názvy ASCII

Vaše aplikace může použít funkci IdnToAscii a určité funkce pro zmírnění rizik k převodu ZDN na ASCII.

Opatrnost

Vzhledem k tomu, že řetězce s velmi odlišnými binárními reprezentacemi se můžou porovnávat jako identické, může tato funkce vyvolat určité obavy ohledně zabezpečení. Pro více informací se podívejte na diskusi o porovnávacích funkcích v Bezpečnostní ohledy: Mezinárodní funkce.

 

Příklady

NLS: Ukázka převodu mezinárodního názvu domény (IDN) ukazuje použití konverzních funkcí IDN. NLS: Ukázka omezení rizik pro mezinárodní název domény (IDN) ukazuje použití funkcí pro zmírnění rizik IDN.

Použití národní jazykové podpory

aspekty zabezpečení: Mezinárodní funkce