Punycode

Fondamenti Domini
Un sistema di codifica che converte i nomi di dominio Unicode in formato compatibile ASCII, consentendo ai nomi di dominio internazionalizzati di funzionare con il DNS.
← Torna al Glossario

Cos'è Punycode?

Punycode è una sintassi di codifica definita in RFC 3492 che trasforma stringhe Unicode nell'insieme di caratteri ASCII limitato supportato da DNS. È il fondamento tecnico che rende possibili i nomi di dominio internazionalizzati (IDN), consentendo ai nomi di dominio in qualsiasi lingua di funzionare con l'infrastruttura DNS esistente.

Il problema che Punycode risolve

Il Domain Name System è stato progettato negli anni '80 con in mente solo i caratteri ASCII. Le etichette DNS possono contenere solo:

Questa limitazione escludeva miliardi di utenti di internet che non utilizzano principalmente l'alfabeto latino. Punycode colma questo divario codificando qualsiasi stringa Unicode nell'insieme ASCII valido.

Come funziona la codifica Punycode

Punycode utilizza un algoritmo intelligente che preserva i caratteri ASCII mentre codifica i caratteri non ASCII in una rappresentazione ASCII compatta.

Il processo di codifica

1. Caratteri separati: Dividi in caratteri ASCII e non ASCII

2. Copia ASCII: Mantieni tutti i caratteri ASCII nelle loro posizioni originali

3. Codifica non ASCII: Utilizza una codifica di interi a lunghezza variabile generalizzata

4. Aggiungi il prefisso: Anteponi "xn--" per indicare la codifica Punycode

Esempi

Originale (Unicode)Codificato (Punycode)
münchenxn--mnchen-3ya
北京xn--fiqs8s
münchen.dexn--mnchen-3ya.de
中文.comxn--fiq228c.com
café.comxn--caf-dma.com

Il prefisso "xn--"

Il prefisso "xn--" è chiamato ACE (ASCII Compatible Encoding). Segnala ai risolutori DNS e alle applicazioni che l'etichetta contiene contenuto codificato Punycode. Questo prefisso:

Punycode in pratica

Gestione del browser

I browser moderni gestiscono automaticamente Punycode:

L'utente digita: 中文.com

Il browser invia: xn--fiq228c.com (al DNS)

Il browser visualizza: 中文.com (nella barra degli indirizzi)

Implementazione dello sviluppatore

JavaScript (Node.js):
const punycode = require('punycode/');

// Codifica a Punycode

const encoded = punycode.toASCII('münchen.de');

// Risultato: xn--mnchen-3ya.de

// Decodifica da Punycode

const decoded = punycode.toUnicode('xn--mnchen-3ya.de');

// Risultato: münchen.de

Python:
domain = 'münchen.de'

encoded = domain.encode('idna').decode('ascii')

# Risultato: xn--mnchen-3ya.de

Gestione degli URL

Quando si lavora con gli URL contenenti IDN:

// L'API URL gestisce Punycode automaticamente

const url = new URL('https://中文.com/path');

console.log(url.hostname); // xn--fiq228c.com

console.log(url.href); // https://xn--fiq228c.com/path

Implicazioni sulla sicurezza

La capacità di Punycode di rappresentare qualsiasi carattere Unicode crea rischi di sicurezza:

Spoofing visivo

Gli attaccanti possono registrare domini che sembrano identici a siti legittimi:

аррlе.com (cirillico 'а' e 'р')

apple.com (lettere latine)

Entrambi appaiono identici in alcuni caratteri ma sono domini diversi.

Protezioni del browser

Per combattere lo spoofing, i browser implementano protezioni:

1. Rilevamento di script misti: Visualizza Punycode per gli IDN sospetti invece dell'Unicode

2. Rilevamento confusionario: Contrassegna i domini che utilizzano caratteri che sembrano ASCII

3. Whitelisting: Consenti la visualizzazione Unicode solo per i TLD ben noti

Lavorare con Punycode nelle API

Quando crei strumenti di dominio:

Memorizza sempre Punycode: Utilizza la forma ASCII internamente per coerenza e indicizzazione del database. Accetta entrambi i moduli: Consenti agli utenti di inserire Unicode o Punycode, convertendo secondo necessità. Visualizza Unicode: Mostra la forma leggibile dall'uomo nelle interfacce utente.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Converti a Punycode minuscolo per l'uso interno

return punycode.toASCII(input.toLowerCase());

}

Punycode è trasparente alla maggior parte degli utenti ma è una conoscenza essenziale per gli sviluppatori che creano applicazioni web internazionali.

Metti in Pratica Questa Conoscenza

Usa l'API di DomScan per verificare disponibilità, salute del dominio e altro.