Если вы ограничены ASCII, как вы сможете представлять более сложные вещи, такие как смайлы или нелатинские символы? Одним из ответов является Punycode, способ представления символов Юникода в ASCII. Однако, хотя технически вы можете закодировать необработанные биты Юникода в символы, например Base64, есть загвоздка. Система доменных имен (DNS) обычно требует, чтобы имена хостов не были чувствительны к регистру, поэтому, вводите ли вы HACKADAY.com, HackADay.com или просто hackaday.com, все это идет в одно и то же место.
[А. Костелло] в Калифорнийском университете Беркли предложил идею Punycode в RFC 3492 в марте 2003 года. В нем описан простой алгоритм, в котором все обычные символы ASCII извлекаются и закрепляются с одной стороны с разделителем между ними, в данном случае дефисом. Затем символы Юникода кодируются и закрепляются в конце строки.
Сначала числовой код и позиция в строке умножаются. Затем число кодируется как База-36 (a-z и 0-9) целое число переменной длины. Например, приветствие и греческое слово «спасибо»: «Эй, ευχαριστώ” становится «Привет, -mxahn5algcq2″. Точно так же прекрасный город München становится мнчен-3я.
Как вы могли заметить в примере с греческим языком, нет ничего, что могло бы помочь декодеру узнать, какие символы в базе 36 принадлежат какому исходному символу Юникода. Благодаря целым числам переменной длины каждая значащая цифра распознается, поскольку существуют пороговые значения того, какие числа могут быть закодированы. На помощь приходит конечный автомат. RFC дает пример псевдокода, описывающего алгоритм. Это довольно умно: использовать смещение, которое меняется по мере продвижения декодирования. Поскольку она всегда возрастает, это монотонная функция с некоторыми хитрыми свойствами.
Конечно, чтобы обычные URL-адреса не интерпретировались как Punycode, URL-адреса имеют специальный небольшой префикс. хн-- чтобы сообщить браузеру, что это код. Сюда входят все символы Юникода, поэтому смайлы также допустимы. Так почему ты не можешь пойти в xn--mnchen-3ya.de? Если вы введете его в браузер или щелкните ссылку, вы можете увидеть, как ваш браузер преобразует этот запутанный буквенный суп в красивый URL-адрес (не все браузеры делают это). Самая большая проблема — это сам Unicode.
Несмотря на то, что Unicode предлагает невероятную поддержку, позволяющую сделать сотни языков, используемых в сети каждый день, возможными и, смеем сказать, даже в некоторой степени простыми, есть и некоторые недостатки. Кириллица, буквы нулевой ширины и другие странности Юникода позволяют тем, у кого более гнусные намерения, создать домен, который при отображении отображается как известный веб-сайт. Сертификаты SSL действительны, и все остальное проверяется. Кириллица включает символы, которые визуально идентичны своим латинским аналогам, но представлены по-другому. Возможности для хакеров и попыток фишинга слишком велики, и до сих пор Punycode не разрешен на большинстве доменов.
Например, можете ли вы отличить эти два домена?
Некоторые браузеры отображают текст при наведении как Punycode, а некоторые сохраняют его как эквивалент UTF-8. Буква «а» (U+0061) была заменена кириллической буквой «а» (U+0430), которую большинство компьютеров отображают точно таким же символом.
Это Атака на омографы IDN, где они полагаются на то, что пользователь нажмет на ссылку, между которой он не может отличить. В 2001 году два исследователя безопасности опубликовали статью на эту тему, зарегистрировав «microsoft.com» с кириллическими символами в качестве доказательства концепции. В ответ доменам верхнего уровня было рекомендовано принимать только символы Юникода, содержащие латинские символы, а также символы языков, используемых в этой стране. В результате многие из распространенных доменов верхнего уровня в США вообще не принимают доменные имена Unicode. По крайней мере, неотображаемые символы специально объединены ICANN, что позволяет избежать большой банки с червями, но наличие визуально идентичных, но разных побитовых символов приводит к путанице.
Однако меры по смягчению последствий этих типов атак постепенно внедряются. В качестве первого уровня защиты браузеры Firefox и Chromium отображают версию без Punycode только в том случае, если все символы принадлежат одному и тому же языку. Некоторые браузеры преобразуют все URL-адреса Unicode в Punycode. Другие методы используют оптическое распознавание символов (OCR), чтобы определить, можно ли интерпретировать URL-адрес по-другому. За пределами браузера ссылки, отправленные в текстовых сообщениях или по электронной почте, могут не иметь такого же функционала, и вы не узнаете об этом, пока не откроете их в своем браузере. А потом уже слишком поздно.
Если оставить в стороне проблемы, смогут ли Punycodes провести время под солнцем? Появится ли когда-нибудь у Hackaday ☠️📅.com? Кто знает. Но тем временем мы можем насладиться умным решением, предложенным в 2003 году, сложной проблемы интернационализации доменных имен, которую мы до сих пор не решили.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- Платоблокчейн. Интеллект метавселенной Web3. Расширение знаний. Доступ здесь.
- Источник: https://hackaday.com/2023/01/18/punycodes-explained/
- 2001
- a
- Принять
- алгоритм
- Все
- всегда
- и
- ответ
- около
- нападки
- попытки
- красивая
- становится
- не являетесь
- между
- смещение
- Крупнейшая
- браузер
- браузеры
- Калифорния
- случаев
- сертификаты
- персонаж
- распознавание символов
- символы
- Проверки
- Город
- код
- COM
- Общий
- комплекс
- компьютеры
- сама концепция
- заблуждение
- замешательство
- конвертировать
- может
- страна
- курс
- день
- Декодирование
- Определять
- разница
- различный
- Digit
- DNS
- домен
- Имя домена
- ДОМЕННЫЕ ИМЕНА
- доменов
- Dont
- каждый
- Писем
- пользоваться
- Эквивалент
- Даже
- НИКОГДА
- каждый день
- многое
- пример
- объяснены
- Firefox
- First
- от
- функция
- в общем
- получить
- GIF
- дает
- Go
- идет
- большой
- приветствие
- Хакеры
- имеющий
- помощь
- зависать
- Как
- Однако
- HTTPS
- Сотни
- идея
- идентичный
- in
- включает в себя
- повышение
- невероятный
- намерения
- IT
- саму трезвость
- Сохранить
- Знать
- язык
- Языки
- большой
- Поздно
- латинский
- слой
- Лиды
- письмо
- LINK
- связи
- мало
- посмотреть
- машина
- Создание
- многих
- Март
- то время
- сообщение
- может быть
- БОЛЕЕ
- самых
- умноженная
- имя
- имена
- номер
- номера
- OCR
- Странности
- Предложения
- ONE
- открытый
- Возможности
- оптическое распознавание символов
- оригинал
- Другое
- контуры
- внешнюю
- бумага & картон
- фишинг
- Часть
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- должность
- возможное
- довольно
- предотвращать
- Проблема
- доказательство
- доказательство концепции
- свойства
- предложило
- защиту
- опубликованный
- Сырье
- признание
- Управление по борьбе с наркотиками (DEA)
- регистрирующий
- регулярный
- заменить
- представлять
- представленный
- требуется
- спасать
- исследователи
- ответ
- ограниченный
- результат
- Прокат
- рулонах
- то же
- безопасность
- исследователи безопасности
- набор
- показывать
- значительный
- Аналогичным образом
- просто
- Медленно
- So
- уже
- Решение
- некоторые
- в некотором роде
- особый
- конкретно
- SSL
- По-прежнему
- простой
- предмет
- Вс
- поддержка
- символ
- система
- снижения вреда
- Ассоциация
- их
- вещи
- время
- в
- вместе
- слишком
- верхний уровень
- Transform
- Типы
- юникода
- Университет
- Университет Калифорнии
- URL
- использование
- Информация о пользователе
- Использующий
- версия
- Web
- известный
- Что
- будь то
- который
- в то время как
- КТО
- Википедия.
- будете
- глисты
- ВАШЕ
- зефирнет