Руководство по безопасности браузеров (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:
Таблица 2
Описание
|
MSIE7
|
MSIE8
|
FF3
|
Сафари
|
Опера
|
Хром
|
Android
|
Требование к
кодировке URL-пути, когда следуют обычные ссылки
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
Требование к
кодировке строки запроса URL, когда следуют обычные ссылки
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
|
Требование к
кодировке строки запроса URL для XMLHttpRequest-запроса
|
кодировка страницы
|
кодировка страницы
|
кодировка страницы
|
искалечен
|
кодировка страницы
|
искалечен
|
искалечен
|
Требование к
кодировке URL-адресов, введенных вручную
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
UTF-8
|
Требование к
кодировке строки запроса URL, введенных вручную
|
перекодирование в 7-бит
|
перекодирование в 7-бит
|
UTF-8
|
UTF-8
|
голый?
|
UTF-8
|
UTF-8
|
Необработанные
данные Unicode в именах хостов автоматически преобразовываются в Punycode?
|
ДА
|
ДА
|
ДА
|
ДА
|
ДА
|
ДА
|
НЕТ
|
«Процент-кодирование»
на основе UTF-8 в именах хостов автоматически преобразовываются в Punycode?
|
ДА
|
ДА
|
на повтор
|
ДА
|
ДА
|
ДА
|
НЕТ
|
Отображение адресной
строки Unicode в имени хоста
|
Unicode
|
Unicode
|
Unicode
|
Unicode
|
Unicode
|
Unicode
|
Punycode
|
Отображение адресной
строки Unicode за пределами имени хоста
|
Unicode
|
Unicode
|
Unicode
|
Unicode
|
как?
|
Unicode
|
n/a
|
ПРИМЕЧАНИЕ 1: Firefox, как правило, использует кодировку UTF-8 для кодирования большинства Url, но будет посылать символы, поддерживаемые ISO-8859-1, с помощью данной кодовой страницы.
ПРИМЕЧАНИЕ 2: Для защиты от фишинга многими браузерами вводятся дополнительные ограничения на использование некоторых или всех символов Unicode в некоторых доменах верхнего уровня.
Комментариев нет:
Отправить комментарий