Gestione dei nomi di dominio internazionalizzati (IDN)

In questo argomento viene descritto come usare i nomi di dominio internazionalizzati (IDN) nelle applicazioni. Gli IDN sono specificati da Network Working Group RFC 3490: Internazionalizzazione dei nomi di dominio nelle applicazioni (IDNA). Prima di questa bozza standard, gli IDN erano limitati ai caratteri latini senza segni diacritici. IDNA consente agli IDN di includere caratteri latini con segni diacritici, insieme ai caratteri di script non latini, ad esempio cirillico, arabo e cinese. Lo standard stabilisce anche regole per il mapping degli IDN ai nomi di dominio solo ASCII. Di conseguenza, i problemi IDNA possono essere gestiti sul lato client, senza richiedere modifiche al server dei nomi di dominio (DNS).

Attenzione

RFC 3490 introduce una serie di problemi di sicurezza correlati all'uso dei nomi IDN. Per altre informazioni, vedere la sezione correlata di Considerazioni sulla sicurezza: Funzionalità internazionali.

 

Nota

IDNA è attualmente basato su Unicode 3.2.

 

Funzioni API NLS per la gestione degli IDN

NLS include le funzioni di conversione seguenti che l'applicazione può usare per convertire un IDN in rappresentazioni diverse. Per un esempio dell'uso di queste funzioni, vedere NLS: Internationalized Domain Name (IDN) Conversion Sample (Esempio di conversione).

  • IdnToAscii. Converte un IDN in Punycode.
  • IdnToNameprepUnicode. Esegue la parte NamePrep della conversione di un IDN in un nome ASCII. Questa funzione crea una rappresentazione Unicode canonica di una stringa.
  • IdnToUnicode. Converte una stringa Punycode in una normale stringa UTF-16.

NLS definisce anche diverse funzioni API che possono essere usate per attenuare alcuni dei rischi di sicurezza presentati dalla tecnologia IDN. In Windows Vista e versioni successive vengono usate le funzioni seguenti per verificare che i caratteri in un determinato IDN vengano disegnati interamente dagli script associati a impostazioni locali o impostazioni locali specifiche. Per un esempio dell'uso di queste funzioni, vedere NLS: Internationalized Domain Name (IDN) Mitigation Sample (Esempio di mitigazione dei nomi di dominio internazionalizzati).

Per le applicazioni eseguite in Windows XP e Windows Server 2003, le funzioni DownlevelGetLocaleScripts, DownlevelGetStringScripts e DownlevelVerifyScripts svolgono un ruolo simile alle funzioni elencate in precedenza per ridurre i rischi di sicurezza. Il download delle API di mitigazione "Microsoft Internationalized Domain Name (IDN) è disponibile da archive.org.

Gestire stringhe Unicode

IDNA supporta la trasformazione delle stringhe Unicode in etichette dei nomi host legittime, ad eccezione delle stringhe contenenti determinati caratteri non consentiti, ad esempio caratteri di controllo, caratteri dall'area di utilizzo privato (PUA) e simili. L'applicazione può usare il flag di IDN_Uedizione Standard_STD3_ASCII_RULES con diverse funzioni di conversione NLS per forzare l'esito negativo delle funzioni se rilevano caratteri ASCII diversi da lettere, numeri o caratteri meno (-) o se una stringa inizia o termina con il carattere meno trattino. Questi caratteri sono sempre stati vietati per l'uso nei nomi di dominio e rimangono vietati nella bozza standard.

Gestire i punti di codice non assegnati

Gli IDN non possono contenere punti di codice non assegnati. Di conseguenza, i punti di codice non associati a un carattere ("assegnato") a partire da Unicode 3.2 non hanno mapping IDN definiti, anche se il flag IDN_ALLOW_UNASSIGNED in determinate funzioni di conversione consente di eseguirne il mapping a Punycode. È possibile trovare un elenco di punti di codice non assegnati in RFC 3454.

Attenzione

Se l'applicazione codifica punti di codice non assegnati come Punycode, i nomi di dominio risultanti devono essere illegali. La sicurezza può essere compromessa se una versione successiva di IDNA rende questi nomi validi o se l'applicazione filtra i caratteri non validi per tentare di creare un nome di dominio legale.

 

I punti di codice non assegnati non sono consentiti nelle stringhe archiviate usate negli identificatori di protocollo e nelle entità denominate, ad esempio i nomi nei certificati digitali e nelle parti del nome di dominio DNS. Tuttavia, i punti di codice sono consentiti nelle stringhe di query, ad esempio nomi immessi dall'utente per le autorità di certificazione digitali e le ricerche DNS, che vengono usati per la corrispondenza con gli identificatori archiviati.

Attenzione

Sebbene le stringhe di query possano usare punti di codice non assegnati, non è consigliabile usarle nelle applicazioni. Anche una stringa di query fornita dall'utente presenta un rischio di attacco di "spoofing". In questo tipo di attacco, il sito host senza scrupoli reindirizza gli utenti dal sito che intende accedere a un altro sito che potrebbe fornire informazioni riservate a terze parti. Ad esempio, la copia di una stringa da un messaggio di posta elettronica in arrivo può presentare gli stessi rischi di fare clic su un collegamento in un browser.

 

Convertire i nomi di dominio in nomi ASCII

L'applicazione può usare la funzione IdnToAscii e alcune funzioni di mitigazione per convertire gli IDN in ASCII.

Attenzione

Poiché le stringhe con rappresentazioni binarie molto diverse possono essere confrontate come identiche, questa funzione può generare determinati problemi di sicurezza. Per altre informazioni, vedere la discussione sulle funzioni di confronto in Considerazioni sulla sicurezza: Funzionalità internazionali.

 

Esempi

NLS: Esempio di conversione IDN (Internationalized Domain Name) illustra l'uso delle funzioni di conversione IDN. NLS: Esempio di mitigazione IDN (Internationalized Domain Name) illustra l'uso delle funzioni di mitigazione IDN.

Uso del supporto per la lingua nazionale

Considerazioni sulla sicurezza: funzionalità internazionali