Punycode

Alan Adı Temelleri
Unicode alan adlarını ASCII uyumlu biçime dönüştüren ve uluslararasılaştırılmış alan adlarının DNS ile çalışmasını sağlayan kodlama sistemi.
← Sözlüğe Dön

Punycode Nedir?

Punycode, RFC 3492'de tanımlanan ve Unicode dizelerini DNS tarafından desteklenen sınırlı ASCII karakter kümesine dönüştüren bir kodlama sözdizisidir. Uluslararasılaştırılmış Alan Adları (IDN'ler) mümkün yapan teknik temeldir; tüm dillerden alan adlarının mevcut DNS altyapısı ile çalışmasını sağlar.

Punycode Çözen Sorunu

Alan Adı Sistemi 1980'lerde, yalnızca ASCII karakterleri göz önünde bulundurularak tasarlanmıştır. DNS etiketleri yalnızca şunları içerebilir:

Bu sınırlama, ana olarak Latin alfabesi kullanmayan dilleri konuşan milyarları hariç tutmuştur. Punycode, herhangi bir Unicode dizesini geçerli ASCII'ye kodlayarak bu boşluğu kapatır.

Punycode Kodlaması Nasıl Çalışır

Punycode, ASCII karakterlerini korurken ASCII olmayan karakterleri kompakt bir ASCII temsili içine kodlayan akıllı bir algoritma kullanır.

Kodlama Süreci

1. Karakterleri Ayır: ASCII ve ASCII olmayan karakterlere böl

2. ASCII'yi Kopyala: Tüm ASCII karakterlerini orijinal konumlarında tut

3. ASCII Olmayan Karakterleri Kodla: Genelleştirilmiş değişken uzunluk tamsayı kodlaması kullan

4. Ön Ek Ekle: Punycode kodlamatasını belirtmek için "xn--" ekleme

Örnekler

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

"xn--" Ön Eki

"xn--" ön ekine ACE (ASCII Uyumlu Kodlama) ön eki denir. DNS çözümleyicilerine ve uygulamalarına, etiketin Punycode kodlu içerik içerdiğini gösterir. Bu ön ek:

Uygulamada Punycode

Tarayıcı İşleme

Modern tarayıcılar Punycode'u otomatik olarak işler:

User types: 中文.com

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

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

Geliştirici Uygulama

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 İşleme

IDN'ler içeren URL'lerle çalışırken:

// 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

Güvenlik Çıkarımları

Punycode'un herhangi bir Unicode karakterini temsil etme yeteneği güvenlik riskleri yaratır:

Görsel Aldatma

Saldırganlar, meşru sitelere görsel olarak özdeş alan adları kaydedebilir:

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

apple.com (Latin letters)

Her ikisi de bazı yazı tiplerinde özdeş görünür, ancak farklı alan adlarıdır.

Tarayıcı Korumaları

Aldatmaya karşı savaşmak için tarayıcılar korumalar uygular:

1. Karışık Komut Algılaması: Şüphe duyulan IDN'ler için Punycode'u görüntüle

2. Kafa Karıştırıcı Algılaması: ASCII'yi taklit eden karakterler kullanarak alan adları işaretle

3. Beyaz Liste: Unicode görüntülemesine yalnızca bilinen TLD'ler için izin ver

API'lerde Punycode ile Çalışma

Alan adı araçları oluştururken:

Her Zaman Punycode Depola: Tutarlılık ve veritabanı dizinlemesi için dahili olarak ASCII biçimini kullan. Her İki Formu Kabul Et: Kullanıcıların Unicode veya Punycode'u girmesine izin ver; gerektiğinde dönüştür. Unicode Görüntüle: Kullanıcı arabiriminde insan tarafından okunabilir formu göster.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Convert to lowercase Punycode for internal use

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

}

Punycode çoğu kullanıcı için şeffaftır ancak uluslararasılaştırılmış web uygulamaları oluşturan geliştiriciler için gerekli bilgidir.

Bu Bilgiyi Uygulamaya Koyun

Alan adı uygunluğunu, durumunu ve daha fazlasını kontrol etmek için DomScan API'sini kullanın.