$ man idn-punycode

IDN ve Punycode Nedir?

IDN (Internationalized Domain Name), içinde ö, ş, ğ, ç gibi ASCII dışı karakterler bulunan alan adlarıdır. DNS bu karakterleri doğrudan taşıyamadığı için IDN'ler, Punycode adı verilen bir kodlamayla xn-- önekli ASCII etiketlere dönüştürülür.

Neden bir dönüşüm gerekiyor?

DNS protokolü teknik olarak herhangi bir baytı taşıyabilse de, alan adları için fiilen kullanılan kural "LDH" kuralıdır: harf (a-z), rakam (0-9) ve tire. Uygulamaların, sunucuların ve protokollerin büyük çoğunluğu bu varsayımla yazılmıştır. Bu altyapıyı değiştirmek yerine IETF, Unicode alan adlarını uygulama katmanında ASCII'ye çeviren IDNA (Internationalizing Domain Names in Applications) yaklaşımını seçti. Yani DNS sunucuları, registry'ler ve DNS kayıtları yalnızca ASCII biçimini görür; Unicode biçimi kullanıcıya gösterim içindir.

U-label ve A-label

Örneğin örnek.com alan adının DNS'teki karşılığı xn--rnek-4qa.com'dur. Dönüşüm etiket bazında yapılır; com zaten ASCII olduğu için değişmez. RDAP yanıtlarında bu iki biçim ayrı alanlarda gelir: ldhName A-label'ı, unicodeName ise U-label'ı içerir. Klasik WHOIS çıktısında genellikle yalnızca A-label görünür.

Punycode nasıl çalışır?

Punycode, RFC 3492 ile tanımlanmış, Bootstring adlı genel algoritmanın alan adlarına uyarlanmış hâlidir. Mantığı şöyledir:

  1. Etiketteki ASCII karakterler sırası bozulmadan başa yazılır. örnek için bu rnek'tir.
  2. ASCII kısım varsa ardından ayırıcı olarak bir tire eklenir.
  3. ASCII dışı karakterlerin hem Unicode kod noktası hem de etiket içindeki konumu, değişken uzunluklu bir tamsayı dizisi olarak kodlanır ve yalnızca a-z ile 0-9 kullanılarak yazılır. örnek örneğinde bu kısım 4qa'dır ve "ö karakterini 0. konuma yerleştir" bilgisini taşır.
  4. Son olarak xn-- öneki eklenir.

Bu yüzden yalnızca bir harfi farklı olan iki IDN'in A-label'ları birbirine hiç benzemeyebilir. Dönüşümü elle yapmak yerine dilinizin standart kütüphanesini kullanın; çoğu dilde IDNA veya UTS #46 uygulayan hazır fonksiyonlar bulunur.

IDNA2003 ve IDNA2008

İlk standart (IDNA2003; RFC 3490, 3491, 3492) Unicode'un belirli bir sürümüne bağlıydı ve dönüşümden önce geniş bir eşleme (büyük harfi küçüğe çevirme, bazı karakterleri silme veya değiştirme) uyguluyordu. Bugünkü standart IDNA2008'dir (RFC 5890–5894). IDNA2008, hangi karakterlerin izinli olduğunu Unicode özelliklerinden türetilen kurallarla belirler ve eşlemeyi protokolün dışına, uygulamaya bırakır. Örneğin Almanca ß IDNA2003'te ss'ye dönüştürülürken IDNA2008'de kendi başına geçerli bir karakterdir.

Tarayıcılar ve birçok kütüphane, iki standart arasındaki geçişi yumuşatmak için Unicode Consortium'un UTS #46 belgesindeki uyumluluk işlemesini uygular. Pratikte bu, aynı girdinin farklı araçlarda nadiren de olsa farklı sonuç verebileceği anlamına gelir.

Türkçe karakterlerde dikkat edilecekler

Homograf saldırıları

Unicode'da birbirine görsel olarak çok benzeyen karakterler vardır. Örneğin Kiril alfabesindeki а (U+0430) ile Latin a (U+0061) çoğu yazı tipinde ayırt edilemez. Saldırganlar bu benzerliği kullanarak tanınmış bir alan adına görünüşte tıpatıp benzeyen ama tamamen farklı bir A-label'a sahip alan adları kaydedebilir ve oltalama (phishing) için kullanabilir.

Alınan başlıca önlemler:

Şüpheli bir alan adını sorgu aracına girerek kayıt tarihini, registrar'ını ve durum kodlarını görebilirsiniz; çok yeni kaydedilmiş, tanınmış bir markaya benzeyen IDN'ler genellikle dikkat gerektirir.

Özet

IDN'ler kullanıcıya Unicode olarak gösterilir ama DNS'te xn-- önekli Punycode etiketleri olarak yaşar. Güncel standart IDNA2008'dir, tarayıcılar uyumluluk için UTS #46 uygular. Türkçe karakterli alan adlarında küçük harf kullanın, ASCII karşılığını da düşünün ve homograf riskine karşı A-label'ı kontrol etmeyi alışkanlık hâline getirin.

Bir alan adının WHOIS/RDAP kaydını ve durum kodlarını gör.

whois sorgula →