Что такое User Agent и почему браузер позволяет себе больше, чем ему можно?

Что такое User Agent и почему браузер позволяет себе больше, чем ему можно?

@it_sekreti

Каждый раз когда вы заходите на сайт вы передаете огромное количество информации и параметров о которой даже не задумывались, один из этих параметров это User Agent. В этой статье будет рассмотрено, что это и каким образом все работает, а так же как добавить себе немного анонимности.

Что это такое такое и как он выглядит?

User Agent — это текстовая строка, являющаяся частью HTTP запроса, начинающаяся с "User-agent:" или "User-Agent:", которую используют веб-браузеры для сообщения сайту информации о себе.

По user agent можно определить достаточно много параметров для вашей идентификации о которых поговорим ниже.

простой пример HTTP запроса

Сразу расскажу почему эта строчка выглядит так странно и что означает каждый из ее параметров и для этого немного истории.

Предыстория появления

Раньше сайты писали не в соответствии со стандартами из-за доминирования определенных браузеров и такие сайты посылали разное содержимое веб-страницы в зависимости от получаемого от клиента значения User-Agent. Это приводило к тому, что использовать сайт можно было только с помощью 1-2 браузеров, а для остальных из-за другого User Agen'а сайты отображались некорректно. В связи с этим многие браузеры стали «прятать» или «подделывать» User-agent.

Началось все с выпуска в 1993 году первого графического браузера NCSA Mosaic под платформу Windows.

NCSA_Mosaic/2.0 (Windows 3.1) - его индентефикатор, вроде пока все логично

Потом появилась Mozilla что сокращением было «Mosaic Killer», не наша мозила, а кодовое имя браузера Netscape Navigator 2, однако в user agent'е он сохраняет свое кодовое имя

Mozilla/Версия [Язык] (Платформа; Шифрование)

Таким образом, типичной строкой пользовательского агента вторых версий браузеров от Netscape было:

Mozilla/2.0 [en] (WinNT; I)

Потом Microsoft выпустила свою версию браузера под названием Internet Explorer и добавила в начало «Mozilla/<версия>»  для получения контента, предназначенного для Netscape Navigator.

Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)

Compatible - означает, что этот браузер совместим с браузером Mozilla, но не является им.

Internet Explorer на то время оказался лучшим браузером и он убил Netscape Navigator. И Netscape стал работать над новым движком.

Движок рендеринга веб-страниц был выпущен компанией Mozilla (в которую переродился Netscape) под кодовым именем Gecko. Теперь уже он был более удачной реализацией, но из-за тяжелого наследия в виде «тонны старых сайтов» ему пришлось маскироваться под Netscape. Типичным примером строки пользовательского агента браузера Mozilla был:

Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826

Как оказалось, Mozilla была слишком неповоротливой, из-за чего было принято решение сделать легковесный браузер на исходном коде Mozilla. Так появился Firefox. Типичной строкой пользовательского агента у него была:

Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0

которая означала, что это браузер Firefox, который претендует на звание Mozilla и использует Gecko для рендеринга страниц.

Геко оказался весьма хорош, а IE — нет. И предпочтение стали отдавить Gecko. Из-за этого браузерам типа Konqueror (браузер под линукс) и Opera приходилось маскироваться под конкурентов.

Opera использует свой движок для рендеринга и традиционная для нее строка пользовательского агента выглядит как:

Opera/9.51 (Windows NT 5.1; U; en)

В режиме маскировки она приобретает вид (в зависимости от того, под какой браузер она маскируется):

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51
Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.5

Konqueror использует движок KHTML, который по характеристикам похож на Gecko, именно поэтому в строке пользовательского агента у него присутствует фраза like Gecko.

Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)
Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko)

Движок KHTML оказался довольно гибким, поэтому компания Apple взяла его за основу, добавила новых возможностей и выпустила под названием WebKit. Но из-за наслоения традиций и поддержки древних сайтов пришлось еще больше удлинить строку пользовательского агента:

Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5

Позднее на рынок браузеров пришла компания Google и сделала свой Chrome на базе WebKit'а, выпускаемого Apple. В теории стало возможным «прикидываться» сразу почти всеми существующими браузерам одновременно:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13

Т.е современный пользовательский агент Chrome, одновременно заявляющет, что он является Mozilla, Chrome, Safari. Неплохо.

Внизу несколько юзер агентов и их расшифровка и вполне логично, что у нового браузера Edge добавилось еще одно значение.

Какую информацию он передает?

Очень часто User-Agent содержит, помимо версии операционной системы, список установленных в браузере плагинов и дополнений, комбинация которых может быть достаточно редкой.

По user agent можно определить достаточно много параметров, например, название операционной системы, её версию и разрядность. Также можно определить и само устройство, на котором установлен браузер, это может быть компьютер, планшет, iPhone, iPad или другое мобильное устройство. Еще по user agent можно определить функции, которые поддерживает веб-браузер, например, JavaScript, Java Applet, Cookie, VBScript и Microsoft's ActiveX.

Возьмем мой измененный юзерагент и посмотрим какую базовую информацию он может дать.

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/603.1.13 (KHTML, like Gecko) Version/10.1 Safari/603.1.13

Сразу можно сказать, что тот, кто сейчас в интернте с таким юзер агентом то, что он сидит через Safari версии 10.1 на Mac OS X 10, так же версию движка на котором работает браузер. Не забывайте, что это самый примитивный пример и если немного постараться, то можно вытащить информацию о ваших установленных плагинах.


Теперь проверим как страница ведет себя с разных юзерагентов.

Сейчас страница отображается так как отображалась бы в сафари.

И теперь поменяем значение юзер агента на:

Mozilla/5.0 (Linux; Android 7.0; SM-G935P Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.92 Mobile Safari/537.36

Я надеюсь вы заметили, что уже видно модель телефона и любой из сайтов это может увидеть и много ли таких моделей именно с таким юзерагетом?

Так вот, тот же запрос теперь отображается так. Браузер думает, что мы сидим с телефона.

Мы подошли только к 2 способам индентефицации и сбора информации о пользователе, а уже так много можно сказать о человеке, который перешел на сайт.

Как происходит определение?

Как возможно определить так много параметров из одной маленькой строки? Большинство известных строк user agent находятся в базе данных browscap.org, если такая строка найдена в базе, то можно получить многие параметры, например, что за веб-браузер, что за версия, что за операционная система и т. д. Так же можете заглянуть сюда.

И если вам попался неизвестный юзерагент, что крайне маловероятно, вы можете прочитать вручную, вы ведь теперь это умеете.

Как и кто использует данные user agent?

Информация об источнике запроса может быть необходима для решения следующих задач:

  • перенаправление запросов на мобильную версию;
  • использование специфических стилей для определенных браузеров;
  • сбор статистики о количестве запросов с разных устройств;
  • создание специальных правил для обработки запросов от роботов;
  • запрет доступа к сайту для каких-либо веб-утилит;
  • индентефикации для персонализированной рекламы;
  • если вы из ФСБ из отдела К, то вы знаете зачем эти данные.

Как заменить User-Agent браузера?

Сначала будет менять вручную, т.к чем ближе к прямым настройкам браузера, тем лучше.

Firefox

Я советую использовать именно этот браузер из-за его открытого исходного кода и легкости в модификации.

В адресной строке набрать about:config и создать строку с именем general.useragent.override, по умолчанию такой строки нет. В значение строки необходимо вписать то, что будет отображаться в user agent.


Chrome

Необходимо запустить веб-браузер с ключом --user-agent="" и в кавычках указать новую строку user-agent. Например, в Windows можно запустить, нажав Win+R, и в поле "Открыть" вписать chrome --user-agent="Новый юзерагент". Проверить текущее значение можно, введя в адресной строке about:.

Opera

В новых версиях оперы нельзя изменить юзерагент средствами браузера, я рекомендую установить расширение "User-Agent Switcher"

Итог

Если вам по какой-то причине не удалюсь сменить User Agent вручную, то советую так же использовать плагин "User-Agent Switcher" для остальных браузеров, но обязательно проверить насколько корректно он работает в каждом отдельном случае.

Мы еще на один шаг приблизились к скрытию своих данных от посторонних лиц.

Больше материала на it_sekreti.

Report Page