i18n и домены

Опубликовано:
Translations:no translations yet
Теги:programming

Есть разные схемы кодирования доменных имён, заточенных под совместимость со старым-добрым DNS. Например, есть ThaiURL и Punycode. Первая схема превращает человеческое тайское ชื่อไทย.คอม в понятное роботам byfdosbniqlse.bycc2ii.net, вторая превращает человеческое русское вперед.рф в понятное роботам xn--b1aeca2ch.xn--p1ai.

Оставим ThaiURL наслаждаться под тропическим солнцем и посмотрим на Punycode. Punycode — это один из самых визуально заметных фейлов в истории Интернета.

Рисунок с лоджии Рафаэля, Эрмитаж.

Началось всё с того, что к 2002 году появилось движение под названием Internationalized Domain Names in Applications (IDNA). IDNA сначала породили RFC 3490, который описал схему превращения любой юникодной строки (1.1 миллиона возможных символов) в английские буквы-цифры и чёрточки (37 возможных символов). Потом вышел RFC 3492, который применил схему к доменным именам, заодно назвав такое применение Punycode.

Пока разрабатывались эти стандарты, пользователи браузеров привыкали в первую очередь смотреть на доменное имя, если есть какие-то подозрения по поводу сайта. Когда имена сайтов могут состоять из 37 разных букв, условный oz0n.ru сразу видно на фоне ozon.ru.

IDNA расширили набор с 37 до 100 000 символов. В ozon.ru стало можно вписать русские буквы о. Выглядят они точно так же, как английские, но это будет даже близко не настоящий сайт. Это называется IDN homograph attack.

Как обычно, разработчики браузеров надеялись, что регистраторы доменных имен не будут позволять регистрировать опасные имена. Регистраторы просто хотели продавать доменные имена, поэтому их подставные домены мало волновали.

Разрешили конфликт интересов в 2002 году Евгений Габрилович (беларус, сейчас директор Facebook Reality Labs) и Алекс Гонтмахер, написав вайтпейпер «The homograph attack». Оказалось, что регистраторы никак не могут решить проблему. Атакующий всегда может купить красивый домен первого уровня (например, attacker.com), а затем на своём DNS-сервере создать запись про поддомен. Если применить IDNA-преобразования к такому поддомену, получится строка, похожая, например, на ozon.ru/. Последний / в ней не настоящий /, просто похож. URL выглядит вот так: https://ozon.ru/.attacker.com.

Регистраторы с таким не могут поделать абсолютно ничего, поэтому проблему пришлось решать на уровне браузеров (стандарты IDNA было уже не исправить). Если браузер видит, что локаль пользователя и домен в URL чужды друг другу, он отображает роботочитаемый Punycode. Также браузеры разрешают IDNA только для некоторых доменов верхнего уровня  (например, .рф). Для .com и подобных модных доменов верхнего уровня IDNA запрещены.

Итоги

Интернационализированные доменные имена так сильно обрезали, что никаких улучшений в юзабилити для неанглоговорящих людей Интернет не получил.

Если в браузерной строке отображается https://xn-что-тотам, это огрызок древней уязвимости и еще более древней обратной совместимости. Так часто бывает, если безопасность и юзабилити не были заложены в систему с самого начала.

Для борьбы с подобными огрызками по части безопасности недавно появилась новая профессия под названием security engineer. Хорошая профессия, про неё будет отдельный пост.