Browser Security Handbook. Глава 1, пункт 2

Browser Security Handbook. Глава 1, пункт 2

Руководство по безопасности браузеров (Browser Security Handbook). Глава 1

1. Унифицированный указатель ресурса ( URL )

 

2.         Unicode в Url

Некоторые технологии, связанные с перемещением веб-контента и Url-адресов, не имеют особого набора символов, определенных соответствующим RFC. В RFC-3986 сказано: «На местном или региональном уровне, а также с усовершенствованием технологии, пользователи могут воспользоваться возможностью применения широкого диапазона символов; такое использование не определенно в настоящей спецификации».Тот же пренебрежительный подход принят в спецификации http-заголовка.
В результате, в контексте web-страницы, любой старший бит пользовательского ввода, может и должен быть использован как %nn-последовательности, но нет конкретных указаний о том, как перекодировать введенный пользователем адрес в собственную кодовую страницу системы, общаясь с другой стороной, которой не может передать эту кодовую страницу. Системе, которая использует кодировку UTF-8 и получает URL, содержащий Unicodeв пути, соответствует исходная последовательность 0xC4 0x85.Однако, при отправке на сервер, который использует ISO-8859-2, исправленное значение должно послать 0xB1(или, в качестве альтернативы, должна быть включена дополнительная информация о кодировке на клиенте, чтобы осуществить преобразование на стороне сервера). На практике же, большинство браузеров, по умолчанию, отправляют данные в кодировке UTF-8 на любой, введенный вручную в поле URL, текст, и используют данную кодировку страницы на всех последующих ссылках.
Еще одно ограничение Url прослеживается в DNS. RFC 1035 позволяет использовать в метках DNS только символы A-Z a-z 0-9и «.», использующуюся  в качестве разделителя; распознаватель[4] позволяет использовать дополнительно подчеркивание «в DNS-именах, что нарушает стандарт. С развитием Всемирной паутины,  появилась необходимость в именах хостов использовать символы нелатинского алфавита. И использование %nn-кодирования это не альтернатива, потому что %,как такового, не было в списке.
Чтобы решить эту проблему, RFC 3490 изложила довольно надуманную схему кодирования, которая допускает Unicode-символы хранить в DNS-метках, и RFC 3492 , описывающий конкретные реализации в DNS-метрике, часто называемый « Punycode », который обозначается следующим образом:

xn--[US-ASCII-часть]-[закодированные данные в Unicode]

Браузер, поддерживающий Punycode, преобразовывает неизвестные символы, содержащиеся в доменном имени, в последовательность ASCII -символов, а затем выполняет обычный DNS-поиск в кодированной строке.
Ниже показан пример преобразования в Punycode:

href="http://www.r
Alt text

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!

Сергей Сторчак

Персональный блог Сергея Сторчака