$ 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
- U-label: Etiketin Unicode biçimi, ör.
örnek. - A-label: Aynı etiketin ASCII biçimi;
xn--öneki ve ardından Punycode ile kodlanmış metin.
Ö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:
- Etiketteki ASCII karakterler sırası bozulmadan başa yazılır.
örnekiçin burnek'tir. - ASCII kısım varsa ardından ayırıcı olarak bir tire eklenir.
- 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-zile0-9kullanılarak yazılır.örnekörneğinde bu kısım4qa'dır ve "ö karakterini 0. konuma yerleştir" bilgisini taşır. - 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
- Alan adlarını her zaman küçük harfle yazın. Türkçedeki
İ/iveI/ıeşleşmesi Unicode'un varsayılan büyük/küçük harf dönüşümünden farklıdır; büyük harfli girdiler bazı araçlarda beklenmedik A-label'lara dönüşebilir. ı(noktasız i) ileifarklı karakterlerdir ve farklı alan adları üretir.- Bir registry'nin hangi karakterleri kabul ettiği kendi IDN tablosuna bağlıdır. Her TLD her dili ve her karakteri desteklemez.
- Türkçe karakterli bir alan adı aldıysanız, ASCII karşılığını da (ör.
ornek.com) almayı ve birini diğerine yönlendirmeyi değerlendirin. TLS sertifikası, e-posta ve DNS yapılandırmasında her zaman A-label kullanılır.
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:
- Registry'ler genellikle tek bir etikette farklı alfabelerin karıştırılmasını kısıtlar ve dile özel karakter tabloları uygular.
- Tarayıcılar, karışık alfabe içeren veya şüpheli görünen alan adlarını adres çubuğunda Unicode yerine
xn--biçiminde gösterir. - Güvenlik araçları ve kullanıcılar, şüpheli bir bağlantıda alan adının A-label'ını kontrol ederek gerçek adresi görebilir.
Şü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 →