Menangani Nama Domain Internasional (IDN)

Topik ini menjelaskan bagaimana Anda dapat bekerja dengan nama domain internasional (IDN) di aplikasi Anda. IDN ditentukan oleh Network Working Group RFC 3490: Internasionalisasi Nama Domain dalam Aplikasi (IDNA). Sebelum standar draf ini, IDN terbatas pada karakter Latin tanpa diakritik. IDNA memungkinkan IDN untuk menyertakan karakter Latin dengan diakritik, bersama dengan karakter dari skrip non-Latin, seperti Sirilik, Arab, dan Cina. Standar ini juga menetapkan aturan untuk memetakan IDN ke nama domain khusus ASCII. Dengan demikian, masalah IDNA dapat ditangani di sisi klien, tanpa memerlukan perubahan server nama domain (DNS).

Perhatian

RFC 3490 memperkenalkan sejumlah masalah keamanan yang terkait dengan penggunaan IDN. Untuk informasi selengkapnya, lihat bagian terkait dari Pertimbangan Keamanan: Fitur Internasional.

 

Catatan

IDNA saat ini didasarkan pada Unicode 3.2.

 

Fungsi API NLS untuk Menangani IDN

NLS menyertakan fungsi konversi berikut yang dapat digunakan aplikasi Anda untuk mengonversi IDN ke representasi yang berbeda. Untuk contoh penggunaan fungsi-fungsi ini, lihat NLS: Sampel Konversi Nama Domain Internasional (IDN).

  • IdnToAscii. Mengonversi IDN ke Punycode.
  • IdnToNameprepUnicode. Melakukan bagian NamePrep dari konversi IDN ke nama ASCII. Fungsi ini membuat representasi Unicode kanonis dari string.
  • IdnToUnicode. Mengonversi string Punycode menjadi string UTF-16 normal.

NLS juga mendefinisikan beberapa fungsi API yang dapat digunakan untuk mengurangi beberapa risiko keamanan yang disajikan oleh teknologi IDN. Pada Windows Vista dan yang lebih baru, fungsi berikut digunakan untuk memverifikasi bahwa karakter dalam IDN tertentu digambar sepenuhnya dari skrip yang terkait dengan lokal atau lokal tertentu. Untuk contoh penggunaan fungsi-fungsi ini, lihat NLS: Sampel Mitigasi Nama Domain Internasional (IDN).

Untuk aplikasi yang berjalan pada Windows XP dan Windows Server 2003, fungsi DownlevelGetLocaleScripts, DownlevelGetStringScripts, dan DownlevelVerifyScripts memainkan peran serupa dengan fungsi yang tercantum di atas dalam mengurangi risiko keamanan. Unduhan "API Mitigasi Nama Domain Internasional Microsoft (IDN) yang tersedia dari archive.org.

Menangani Untai Unicode

IDNA mendukung transformasi string Unicode menjadi label nama host yang sah, dengan pengecualian string yang berisi karakter tertentu yang dilarang, seperti karakter kontrol, karakter dari area penggunaan privat (PUA), dan sejenisnya. Aplikasi Anda dapat menggunakan bendera IDN_USE_STD3_ASCII_RULES dengan beberapa fungsi konversi NLS untuk memaksa fungsi gagal jika menemukan karakter ASCII selain huruf, angka, atau karakter tanda hubung-minus (-), atau jika string dimulai atau diakhir dengan karakter tanda hubung-minus. Karakter-karakter ini selalu dilarang digunakan dalam nama domain, dan tetap dilarang dalam standar draf.

Menangani Titik Kode yang Tidak Ditetapkan

IDN tidak boleh berisi titik kode yang tidak ditetapkan. Oleh karena itu, titik kode yang tidak terkait dengan karakter ("ditetapkan") per Unicode 3.2 tidak memiliki pemetaan IDN yang ditentukan, meskipun bendera IDN_ALLOW_UNASSIGNED dalam fungsi konversi tertentu memungkinkan mereka untuk dipetakan ke Punycode. Anda dapat menemukan daftar titik kode yang tidak ditetapkan di RFC 3454.

Perhatian

Jika aplikasi Anda mengodekan titik kode yang tidak ditetapkan sebagai Punycode, nama domain yang dihasilkan harus ilegal. Keamanan dapat disusupi jika versi IDNA yang lebih baru membuat nama-nama ini legal atau jika aplikasi memfilter karakter ilegal untuk mencoba membuat nama domain hukum.

 

Titik kode yang tidak ditetapkan tidak diizinkan dalam string tersimpan yang digunakan dalam pengidentifikasi protokol dan entitas bernama, seperti nama dalam sertifikat digital dan bagian nama domain DNS. Namun, titik kode diizinkan dalam string kueri, misalnya, nama yang dimasukkan pengguna untuk otoritas sertifikat digital dan pencarian DNS, yang digunakan untuk mencocokkan dengan pengidentifikasi tersimpan.

Perhatian

Meskipun string kueri dapat menggunakan titik kode yang tidak ditetapkan, Anda tidak boleh menggunakannya di aplikasi Anda. Bahkan string kueri yang disediakan pengguna menghadirkan risiko serangan "spoofing". Dalam jenis serangan ini, situs host yang tidak berurut mengalihkan pengguna dari situs yang ingin mereka akses ke situs lain yang mungkin memberikan informasi sensitif kepada pihak ketiga. Misalnya, menyalin string dari email masuk dapat menyajikan risiko yang sama seperti mengklik tautan di browser.

 

Mengonversi Nama Domain menjadi Nama ASCII

Aplikasi Anda dapat menggunakan fungsi IdnToAscii dan fungsi mitigasi tertentu untuk mengonversi IDN ke ASCII.

Perhatian

Karena string dengan representasi biner yang sangat berbeda dapat dibandingkan sebagai identik, fungsi ini dapat meningkatkan masalah keamanan tertentu. Untuk informasi selengkapnya, lihat diskusi fungsi perbandingan dalam Pertimbangan Keamanan: Fitur Internasional.

 

Contoh

NLS: Sampel Konversi Nama Domain Internasional (IDN) menunjukkan penggunaan fungsi konversi IDN. NLS: Sampel Mitigasi Nama Domain Internasional (IDN) menunjukkan penggunaan fungsi mitigasi IDN.

Menggunakan Dukungan Bahasa Nasional

Pertimbangan Keamanan: Fitur Internasional