Что такое IDN?
IDN (Internationalized Domain Name, интернационализированное доменное имя) — это доменное имя, содержащее символы вне традиционного набора ASCII, использовавшегося в исходной спецификации DNS. IDN позволяют использовать домены на родных письменностях, например китайский (中文.com), арабский (مثال.com), кириллический (пример.com) и многие другие.
Почему важны IDN
Изначально DNS создавался с расчётом на английский язык, поэтому доменные имена ограничивались следующими символами:
- Буквы a-z без различия регистра
- Цифры 0-9
- Дефисы, но не в начале и не в конце
Это исключало миллиарды людей, чьи языки не используют латинский алфавит. IDN делают интернет доступнее, позволяя использовать:
- Адреса на родном языке: пользователи могут вводить URL на своём языке
- Защиту бренда: компании могут закреплять свои названия в нескольких письменностях
- Культурную доступность: снижается барьер для участия в интернете
Как работают IDN: связь с Punycode
Инфраструктура DNS понимает только ASCII, поэтому IDN используют систему кодирования Punycode. При регистрации или открытии IDN происходят следующие шаги:
1. Пользователь вводит: 中文.com (китайское слово «китайский»)
2. Браузер кодирует: xn--fiq228c.com (представление в Punycode)
3. DNS выполняет разрешение: стандартный поиск ASCII
4. Браузер отображает: 中文.com (исходная форма)
Префикс «xn--» обозначает строку, закодированную в Punycode. Для пользователя это происходит прозрачно.
Примеры Punycode
Ниже показаны исходные имена IDN и их ASCII-представления в Punycode:
| Исходное имя домена IDN в Unicode | ASCII-представление в кодировке Punycode |
|---|---|
| münchen.de | xn--mnchen-3ya.de |
| 中文.com | xn--fiq228c.com |
| правда.рф | xn--80aafi6cg.xn--p1ai |
Поддержка IDN в TLD
Поддержка IDN различается в зависимости от TLD:
Полная поддержка
Большинство современных gTLD и многие ccTLD поддерживают IDN:
- .com, .net, .org (Verisign)
- .de (немецкие символы)
- .jp (японский)
- .cn (китайский)
Интернационализированные TLD
Некоторые TLD сами являются IDN:
- .рф (Россия, кириллица)
- .中国 (Китай)
- .भारत (Индия, деванагари)
- .السعودية (Саудовская Аравия, арабский)
Ограниченная или отсутствующая поддержка
Некоторые TLD ограничивают IDN или вовсе их не поддерживают. Всегда проверяйте поддержку IDN для нужного TLD.
Безопасность: атаки омографов
IDN создают риски безопасности из-за атак омографов, при которых визуально похожие символы разных письменностей образуют обманные домены:
apple.com (legitimate - Latin letters)
аpple.com (attack - Cyrillic 'а' looks like Latin 'a')
Защита от атак омографов
Поведение браузера: современные браузеры показывают Punycode для подозрительных IDN вместо формы Unicode, что помогает заметить атаку. Политики реестров: некоторые реестры ограничивают сочетания письменностей, которые можно использовать в одном домене. Мониторинг доменов: инструменты вроде проверки typosquatting в DomScan могут находить зарегистрированные омографические варианты вашего бренда.Реализация поддержки IDN
Для разработчиков инструментов работы с доменами:
Проверка
// Check if domain contains non-ASCII
function isIDN(domain) {
return /[^\x00-\x7F]/.test(domain);
}
Преобразование
// Convert to Punycode for DNS queries
const punycode = require('punycode/');
const ascii = punycode.toASCII('中文.com'); // xn--fiq228c.com
const unicode = punycode.toUnicode('xn--fiq228c.com'); // 中文.com
Запросы RDAP
Большинство серверов RDAP принимают обе формы:
# Both work
curl "https://rdap.verisign.com/com/v1/domain/xn--fiq228c.com"
curl "https://rdap.verisign.com/com/v1/domain/中文.com"
Лучшие практики
При работе с IDN:
1. Всегда храните и обрабатывайте форму Punycode внутри системы
2. Показывайте пользователям форму Unicode
3. Реализуйте обнаружение омографов в функциях безопасности
4. Перед регистрацией проверяйте правила IDN для конкретного TLD