Punycode

Domein-basis
Een coderingssysteem dat Unicode-domeinnamen converteert naar ASCII-compatibel formaat, waardoor geïnternationaliseerde domeinnamen met DNS kunnen werken.
← Terug naar Woordenlijst

Wat is Punycode?

Punycode is een coderingssyntaxis die in RFC 3492 is vastgelegd en Unicode-tekenreeksen omzet naar de beperkte ASCII-tekenset die DNS ondersteunt. Het is de technische basis voor geïnternationaliseerde domeinnamen (IDN's), waardoor domeinnamen in elke taal met de bestaande DNS-infrastructuur kunnen werken.

Het probleem dat Punycode oplost

Het Domain Name System is in de jaren tachtig ontworpen met alleen ASCII-tekens in gedachten. DNS-labels mogen alleen het volgende bevatten:

Door deze beperking werden miljarden internetgebruikers uitgesloten die niet hoofdzakelijk het Latijnse alfabet gebruiken. Punycode overbrugt die kloof door elke Unicode-tekenreeks naar geldige ASCII om te zetten.

Hoe Punycode werkt

Punycode gebruikt een slim algoritme dat ASCII-tekens behoudt en niet-ASCII-tekens tegelijk in een compacte ASCII-weergave codeert.

Het coderingsproces

1. Tekens scheiden: splits de ASCII- en niet-ASCII-tekens

2. ASCII kopiëren: behoud alle ASCII-tekens op hun oorspronkelijke positie

3. Niet-ASCII coderen: gebruik een gegeneraliseerde codering met gehele getallen van variabele lengte

4. Voorvoegsel toevoegen: plaats "xn--" ervoor om Punycode-codering aan te geven

Voorbeelden

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

Het voorvoegsel "xn--"

Het voorvoegsel "xn--" heet het ACE-voorvoegsel (ASCII Compatible Encoding). Het geeft aan DNS-resolvers en toepassingen aan dat het label Punycode-gecodeerde inhoud bevat. Dit voorvoegsel:

Punycode in de praktijk

Browserverwerking

Moderne browsers verwerken Punycode automatisch:

User types: 中文.com

Browser sends: xn--fiq228c.com (to DNS)

Browser displays: 中文.com (in address bar)

Implementatie voor ontwikkelaars

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

// Encode to Punycode

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

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

// Decode from Punycode

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

// Result: münchen.de

Python:
domain = 'münchen.de'

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

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

URL-verwerking

Bij het werken met URL's die IDN's bevatten:

// URL API handles Punycode automatically

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

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

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

Veiligheidsgevolgen

Doordat Punycode elk Unicode-teken kan weergeven, ontstaan er beveiligingsrisico's:

Visuele spoofing

Een aanvaller kan domeinen registreren die identiek lijken aan legitieme websites:

аррlе.com (Cyrillic 'а' and 'р')

apple.com (Latin letters)

In sommige lettertypen zien beide er identiek uit, terwijl het om verschillende domeinen gaat.

Browserbeveiliging

Om spoofing tegen te gaan, gebruiken browsers verschillende beschermingsmaatregelen:

1. Detectie van gemengde schriften: toon Punycode voor domeinen die op verdachte wijze verschillende schriften combineren

2. Detectie van verwisselbare tekens: markeer domeinen met tekens die op ASCII lijken

3. Whitelist: sta Unicode-weergave alleen toe voor bekende TLD's

Punycode in API's

Bij het bouwen van domeinapplicaties:

Sla Punycode altijd op: gebruik intern de ASCII-vorm voor consistentie en database-indexering. Accepteer beide vormen: laat gebruikers Unicode of Punycode invoeren en converteer de invoer waar nodig. Toon Unicode: geef de voor mensen leesbare vorm weer in gebruikersinterfaces.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Convert to lowercase Punycode for internal use

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

}

Punycode is voor de meeste gebruikers onzichtbaar, maar essentiële kennis voor ontwikkelaars die geïnternationaliseerde webapplicaties bouwen.

Pas Deze Kennis Toe

Gebruik de API van DomScan om domeinbeschikbaarheid, gezondheid en meer te controleren.