User agent
User agent — идентификационная строка клиентского приложения; обычно используется для приложений, осуществляющих доступ к веб-сайтам — браузеров, поисковых роботов и «пауков», мобильных телефонов и других устройств со встроенным доступом к веб-ресурсам.
При посещении веб-сайта клиентское приложение обычно посылает веб-серверу информацию о себе — текстовую строку, являющуюся частью HTTP-запроса, начинающуюся с User-agent: или User-Agent:, и обычно включающая такую информацию, как название и версию приложения, операционную систему компьютера и язык. У «пауков» эта строка часто содержит URL и email-адрес, по которым веб-мастер может связаться с оператором «паука».
Использование веб-сайтами
Из-за доминирования отдельных браузеров в разные периоды в истории всемирной паутины многие веб-сайты проектировались не в соответствии со стандартами W3C и IETF, а для работы с определённым браузером. Такие сайты посылают разное содержимое веб-страницы в зависимости от получаемого от клиента значения User-Agent. Это приводит к тому, что сайт можно открыть только с помощью нескольких самых популярных браузеров, а браузеры, имеющие немного отличающийся идентификатор, оказываются «запрещёнными».
Многие веб-мастера считают такой подход плохой практикой и рекомендуют создавать HTML-разметку настолько стандартизованно, насколько это возможно, чтобы корректно отображать страницы сайта на максимальном количестве браузеров.
Веб-сайты для мобильных телефонов часто вынуждены жёстко полагаться на определение User-Agent, так как браузеры на разных мобильных телефонах слишком различны. Поэтому мобильные веб-порталы обычно генерируют разные страницы в зависимости от модели мобильного телефона. Эти различия могут быть как небольшими (изменение размера изображений специально для меньших экранов), так и весьма существенными (формат WML вместо XHTML).
Строка User-agent также используется веб-мастерами для предотвращения индексирования «поисковыми пауками» некоторых страниц сайта, например когда индексирование определённых страниц не имеет смысла или конкретный «паук» создаёт большую нагрузку на сервер. Веб-мастер может использовать специальный файл robots.txt для рекомендаций «пауку» или просто настроить веб-сайт не отдавать «пауку» эти страницы.
Подделка User-agent
Причины
Искусственная несовместимость
Использование веб-сайтами строки User-agent для изменения отображения страницы часто приводит к тому, что менее популярные браузеры не получают полного содержимого страницы, даже если они могут корректно его отобразить, а в некоторых радикальных случаях такие браузеры не получают вообще ничего[1]. В связи с этим многие браузеры стали «прятать» или «подделывать» User-agent.
Ранний пример этого — использование браузером Internet Explorer строки User-Agent, начинающейся с «Mozilla/<version> (compatible; MSIE <version>…», для получения контента, предназначенного для Netscape Navigator, его главного конкурента в 1990-х. «Mozilla» в данном случае — не браузер с открытым кодом Mozilla, выпущенный гораздо позже, а оригинальное кодовое имя Navigator, которое также было именем талисмана (маскота) компании Netscape. Такой формат строки User-Agent с тех пор использовался и другими браузерами; в частности, из-за того, что доминировать стал Internet Explorer.
Когда Internet Explorer стал доминирующим браузером, такие конкуренты как Firefox, Safari и Opera встроили системы, позволяющие пользователю выбрать ложное значение User-Agent, такое же, что и у свежих версий Explorer. Некоторые из них (Firefox и Safari) копировали значение User-Agent полностью, другие (Opera) копировали значение User-Agent, добавляя истинное имя браузера в конце, что позже привело к тому, что строка содержит три имени и версии: первое зовётся как «Mozilla» (то есть Netscape Navigator); далее «MSIE» (Internet Explorer); и последнее, действительный браузер, такой как «Opera». Opera также позволяла полностью замаскироваться под Internet Explorer или Firefox, полностью скрывая имя «Opera».
В случае Safari строка User-Agent содержит 5 имён (Mozilla, AppleWebKit (идентификатор «движка»), «KHTML, like Gecko» (используемый Safari WebKit основан на движке KHTML, Gecko — кодовое имя движка последних версий Mozilla Firefox) и Safari. Таким образом, если сайт делает проверку на практически любой современный браузер (кроме Opera) — Safari её пройдёт. Другие браузеры на движке WebKit работают аналогично.
Кроме браузеров, другие программы, использующие протокол HTTP, к примеру менеджеры закачек и оффлайновые браузеры, также имеют возможность изменять значение User-Agent, посылаемое серверу, по желанию пользователя. Это сделано, наверное, для обеспечения совместимости с определёнными серверами (некоторые серверы отказываются обслуживать подобные программы, так как они могут оказать значительные нагрузки на ресурсы сервера; Google, например, для агента по умолчанию python urllib отдаёт 403).
Подобная проблема продолжает существовать в мире браузеров, и поэтому начата кампания, способствующая тому, чтобы разработчики сайтов проектировали сайты в соответствии со стандартами, а не для какого-то любого определённого браузера.
Так, многие веб-сайты, созданные в 2005 году, лучше соответствуют стандартам, чем это было ранее в истории Веба. Однако, на некоторых сайтах всё ещё используются устаревшие скрипты JavaScript, в сущности, блокирующие работу других браузеров, помимо Internet Explorer или Netscape Navigator. Причина этого часто заключается в бездумном копировании старого кода, взятого с других сайтов, без полного понимания того, какой эффект этот код будет в действительности иметь.
Последствия
Одним из результатов подделки значения User-Agent является переоценка популярности соответствующего (обычно и без того популярного) браузера в статистике и недооценка популярности других браузеров и, как следствие, отсутствие у разработчиков вышеописанных сайтов стимула к исправлению проблем совместимости.
Уровни шифрования
Netscape, Mozilla, Opera и некоторые другие используют одну из этих букв для указания поддерживаемого уровня шифрования. Так как правительство США ранее не позволяло экспорт систем шифрования с ключом более 40 бит, выпускались разные версии с разным уровнем шифрования. «U» означало «USA» (США) (для версий с ключом шифрования в 128 бит), «I» означало «International» (международная) (браузер имел возможность шифровать с ключом в 40 бит и мог использоваться в любой точке мира), «N» означало «None» (без шифрования). Изначально версии с буквой «U» было разрешено загружать только жителям США, но с тех пор, как правительство США ослабило свою политику, экспорт систем шифрования высокого уровня теперь разрешён в большинство стран. Теперь браузеры распространяются только в версии с буквой «U» с поддержкой шифрования с ключом до 256 бит, так как необходимость в международной версии отпала.
Примечания
- ↑ Bug 334967 - (geckoisgecko) Tracking bug for sites broken by UA string change to not use "Firefox" (англ.). Bugzilla@Mozilla. Дата обращения: 17 июня 2010. Архивировано 25 мая 2014 года.
Литература
- Zakas, N. C. Chapter 9. Client Detection, User-Agent Detection // Professional JavaScript for Web Developers. — Wiley, 2011. — 840 p. — ISBN 9781118059517.
- Sikorski, M. and Honig, A. Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software. — No Starch Press, 2012. — P. 309—311. — ISBN 9781593274306.
Ссылки
- Bovens, Andreas Changes in Opera’s user agent string format (англ.). Dev.Opera (27 мая 2009). Дата обращения: 26 марта 2010. Архивировано из оригинала 5 марта 2012 года.
В статье есть список источников, но не хватает сносок. |