Browser Fingerprint – анонимная идентификация браузеров. Что такое User Agent

Интернет является сетью общего пользования, преимущественно бесплатно.

Но, многие сайты и сервисы постоянно требуют авторизации, причем делают это не самым удобным способом.

Давайте посмотрим, как можно избежать некоторых надоедливых процедур.

Проходим процедуру авторизации без регистрации

Закрытые бета-сервисы, сайты с ограниченной аудиторией — все подобные ресурсы делают авторизацию практически невозможной. Но если очень хочется попасть туда, куда обычным способом никак не проникнуть, стоит попробовать сервисBugMeNot .

Сервис помогает подобрать наиболее общеупотребительные пары логин/пароль, что во многих случаях предоставляет беспрепятственный доступ к тому или иному сервису без регистрации. И если кто-то уже заходил под определенным логином и паролем, отметив это в сервисе, то вы можете видеть такое подтверждение в окне программы.

Кстати, у сервиса есть и плагин под Firefox .

Меняем идентификатор браузера

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

Для Firefox можно скачать плагин User Agent Switcher , который быстро и безболезненно позволяет все это проделать за несколько секунд.

Что касается Safari, то у этого браузера есть встроенная возможность менять идентификатор, так же обстоят дела и с Google Chrome («Свойства»=>«Место хранения»=>«chrome.exe»=>«Свойства»=>пробел и вставить эту строку -user-agent=»Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10″ ).

Кстати, подобным же образом можно получить бесплатный Итернет в Starbucks, Barnes & Noble. Там есть бесплатный доступ к Интернету для владельцев iPhone, и вы тоже можете получить доступ к такой Wi-Fi-точке, изменив идентификатор браузера на iPhone. Таким образом можно работать в Сети, бесплатно, сидя с ноутбуком, а не iPhone.

Получаем доступ к GMail во время проблем с доступом к почтовому сервису

Это не глупость, как может показаться на первый взгляд. Дело в том, что если не работает веб-интерфейс сервиса, это не означает, что не работают протоколы POP3/IMAP. Просто пользуйтесь десктопным клиентом для получения почты со своего GMail-аккаунта, и никаких проблем не должно возникнуть.

Получаем доступ к временно неработающим ресурсам

Можно попробовать обойти эту проблему при помощи вспомогательных средств. Например, можно найти копию нужной страницы в кэше Google. Для этого необходимо в поисковой строке ввести запрос, подобный этому: cache:site.com

Кроме того, можно воспользоваться ресурсами Coral Content Distribution Network , где хранятся архивы многих сайтов. Для того, чтобы найти такой архив, достаточно к имени сайта добавить.nyud.net Например, для http://site.com такой архив будет выглядеть, как http://site.com.nyud.net.

Пользователи браузера Firefox могут воспользоваться плагином для этого браузера, Resurrect Pages Firefox add-on . Плагин предлагает сразу два варианта получения нужной информации — через кэш Google и через Coral Content Distribution Network.

Удаленный доступ к домашнему ПК

Конечно, запустить сайт на своем домашнем компьютере не так просто, да это и не нужно в большинстве случаев. Но если вам необходим какой-нибудь файл с домашнего компьютера, его можно получить, установив определенный набор программ (к примеру, RAdmin), или настроив порт-форвардинг на своем роутере. Это позволит удаленно получать доступ к ресурсам собственного ПК, получив возможность из любой точки мира получать информацию.

Отпечатки браузера представляют собой уникальный слепок с настроек вашего компьютера, а специальные механизмы сайтов могут проводить слежение за вами. Отпечатки браузера – это альтернатива с рядом преимуществ.

Сookies и fingerprints: основные отличия

Cookies (куки) – неотъемлемая составляющая многих операций в Интернете. Они считаются одним их главных средств, которые владельцы сайтов применяют для слежки за активностью клиентов определенного ресурса. Однако данная методика устарела и редко дает нужный эффект.

Причин этому несколько. На современном этапе любой пользователь может отключить операцию по получению куки, либо воспользовавшись режимом Инкогнито в браузере, сохранить их всего лишь на текущую сессию. То есть делая свое присутствие и запоминание для сайта незамеченным. Cookies передают данные не только владельцу ресурса, но и самим пользователям. Клиент видит сами cookies и их отправителя, поэтому может защититься.

Ситуация с fingerprints иная. Данная техника основана на анализе информации, которую браузер отправляет на посещаемый клиентом сайт. На основе нескольких типов данных: языковые настройки, установленные шрифты системы, часовой пояс, разрешение экрана, установленные плагины, цифровые версии программ итд. – создается цельная картина браузера, которая по своему принципу напоминает отпечаток пальца. В итоге даже при полностью удаленных cookies ресурс все равно опознает конкретного пользователя по картине браузера точно и просто.

Важно понимать, что и смена в защите от fingerpritns никак не поможет.

Отпечатки по сути заменяют собой куки и некоторые сайты их активно используют. Парадокс еще и в том, что главное орудие интернет-клиента в борьбе за приватность может сработать против него. Сторонники анонимности выставляют в браузере особые настройки с целью защитить их от чрезмерной активности сайтов по идентификации пользователя. Но многие не подозревают, что такие шаги делают их более узнаваемыми на фоне других посетителей Интернета.

Исследования показали, что компьютеры со стандартными настройками браузеров идентичны у примерно 875 тыс. пользователей. Сайты получали схожую картину, а значит, проведение точной выборки становилось невозможным. Что касается браузеров, настроенных немного по-особенному, они были идентифицированы как уникальные среди 4,4 млн аналогов.

Опасности fingerprints

— Угроза конфиденциальности – главная причина, почему пользователь должен быть настороже. fingerprints гораздо коварнее cookies. От них сложнее защититься, при этом невозможно узнать о том, следят за пользователем или нет. Система помечает ваш ПК особой цифровой меткой в виде хэш-суммы, снятой по специальному алгоритму с ваших настроек, о присутствии которой пользователь даже не догадывается. Дальше просто сравнивает вновь заходящего клиента со своей базой меток и при совпадении однозначно идентифицирует его.

— Fingerprints как глобальный идентификатор. Отпечатки браузера делают его владельца узнаваемым не только на часто посещаемых ресурсах, но и в других электронных источниках. Fingerprints фиксируют целостную картину, которую ресурс получает от браузера, что дает ему возможность идентифицировать клиента даже при изменениях в настройках. Отпечатки могут свести на нет конфиденциальность и деловой переписки, и личной.

— Fingerprints как регенератор зловредных cookies и распространитель пользовательского IP. Многие сайты применяют так называемые Flash LSO super cookies, способные восстанавливать обычные cookies в случае их удаления клиентом. Отпечаток браузера может не только восстановить всю библиотеку cookies, но и вычислить пользователя по его основным сетевым данным. Это сделает процесс очистки системы от cookies бесполезным – сайт все равно узнает клиента.

— Автономность. Для идентификации отпечатков конкретного браузера библиотеки cookies могут даже не понадобиться. Даже заблокировав выполнение всех потенциально вредоносных операций, пользователь не может быть уверен в том, что fingerprints не пометят его ПК.

Исследования в данной области, их методология и результаты

Многие исследователи ставили своей целью выяснить, каким образом система идентифицирует браузер. Последнее исследование было основано на сборе всех характеристик браузеров, которые позволяют выделить один браузер на фоне других. Учитывались все главные параметры, как общеизвестные, так и более редкие. Исследователи выделили восемь показателей – обычно именно столько требуется fingerprints для идентификации.

Выборка проводилась с использованием стандартных настроек браузера, потому что именно они стоят у большинства пользователей. Тестировались и более уникальные настройки, например, защита от и .

Некоторые варианты настроек не тестировались в силу ряда причин:

— Трудности в измерении показателей и нехватка времени. Не проводились работы с полным использованием Microsoft ActiveX и Silverlight API, не затрагивался вопрос идентификации пользователя по типу компьютерного процессора. Поскольку Internet Explorer сегодня не очень популярен, работа со специализированными плагинами, предназначенными только для него, проводилась по минимуму. Исследователи решили не тратить время на опыты с разными видами super cookies и системных шрифтов, которые могут быть выявлены по CSS-анализу.

— Не затрагивались часто изменяемые параметры, такие как геолокация и плавающие IP. Не использовалась техника, подключенная через роутер.

— Не тестировались браузеры, в которых проведение операций полностью зависит от пожеланий пользователя.

Основная работа заключалась в проведении математического анализа, основанного на проверке показателей уникальности браузера после внесения изменений в его стандартную целевую картину.

Фундаментом служил уже существующий алгоритм отпечатков, он помечался определенным математическим символом. Алгоритм выстраивался по так называемой «собственной информации» или «surprisal». Элемент «surprisal» представлял собой сведения о конкретном объекте (в данном случае браузере). Каждое из имеющихся сведений считалось отдельной переменной. При регулярном посещении одного ресурса конкретное количество переменных запоминалось, и браузер становился узнаваемым.

Постепенно в готовый алгоритм вводились некоторые изменения: переписывались значения существующих переменных, добавлялись новые. Иногда изменения комбинировались и выписывались в отдельные уравнения. В некоторых случаях применялись статистически независимые элементы, что уменьшало погрешность в измерениях.

— HTTP cookies ID (в случае, если браузер получал cookies); — HMAC IP-адреса пользователя (был получен при помощи специального ключа, который позже отбрасывается).

В процессе исследования был получен один уникальный результат. Компьютер, принимал так называемые «чередующиеся» cookies, передавал информацию о том, что каждый cookie – это отдельный элемент. В результате браузер, работающий от одного IP, имел несколько разных отпечатков. Система показывала практически невозможное: несколько пользователей работали за одним файерволлом. «Чередующиеся» cookies передавались лишь на один IP из 2585 аналогов, а это составляло примерно 3,5% от общего количества адресов, задействованных в исследовании.

Также были отмечены факты, связанные с IP-адресами. Было решено проверить, изменится ли уникальность браузера при смене IP. Результат огорчил сторонников приватности: только 4,6% измененных адресов повлияли на отпечатки браузера. В остальных случаях система полагалась на другие получаемые от пользователей данные.

Вывод: поддельный IP не гарантирует успех в сохранении конфиденциальности. Выборка проводилась среди 321 155 адресов.

Результаты тестирования подтверждают, что защита приватности по-прежнему остается сложной задачей. Из всех браузеров с разными настройками целых 83,6% оказались уникальными (или легко узнаваемыми). 8,1% относились к так называемой категории «нередких аналогов». Лишь 8,2% оказались относительно защищенными от идентификации. Исследование показывает, что степень защищенности при стандартных настройках не зависит от типа браузера.

Использовались почти все версии браузеров и методики анализа, но результат был один — 92% браузеров в интернете уникально. Это как вживленный под кожу чип, тот у кого есть сканер, всегда будет знать кто вы.

Менее узнаваемыми были браузеры с различными плагинами, например, стандартные параметры и параллельно работающий NoScript. Уникальность может снижаться до 40–50%. Однако плагин нужно применять только при обычных показателях (можно дополнительно отключать и ). В противном случае узнаваемость повысится.

Итоги исследования неутешительному для Windows: другие операционные системы (OS X, Android) гораздо менее подвержены идентификации. У них сложнее и процесс передачи cookies, и построение отпечатков браузера.

Очередной приступ паранойи был вполне обоснован - он наступил после прочтения , где автор на примере браузера FireFox рассказывал о потенциальных утечках идентификационной информации. И стало интересно - а на сколько озвученные решения применимы, скажем, к браузеру Google Chrome ?
Скрыть реальный IP - используем разные VPN сервера, отключить львиную долю отслеживающих скриптов - Adblock Plus и Ghostery убрать Referer - не вопрос , что то ещё забыли… Ах да - User-Agent - своеобразный «отпечаток», по которому (в связке, скажем, с IP) легко идентифицировать пользователя. И с этим надо было что-то делать. Найденные решения лишь статично изменяли значение User-Agent, чего было явно недостаточно. Тогда и было решено написать плагин для скрытия реального User-Agent"a, а если быть точнее - подменять его на рандомный. Или почти рандомный.

Немного теории

Вообще, User-Agent (далее по тексту - UA ) - штука нужная. Нужная в первую очередь для корректного отображения страниц, ведь нам всем известно - разные версии разных браузеров по разному рендерят странички, и заботливые web-программисты учитывают этот факт, выдавая нужным браузерам нужным скрипты и стили. Разнится поддержка доступных технологий «движками». Отсюда вытекает первое требование к итогу - возможность «имитировать» различные браузеры, и что самое важное - иметь возможность выбора между ними.
UA - это в первую очередь набор. Набор различных идентификаторов, по которым и происходит определение - какой браузер, какая операционная система, какой версии, и какое специфичное ПО (привет, IE) стоит у пользователя.
Почему именно IP и UA надо скрывать в первую очередь? А давайте посмотрим на лог пустого сайта-заглушки, на котором вообще ничего нет:

$ cat somesite.org.access_log | tail -3 10.12.11.254 - - "GET / HTTP/1.0" 200 5768 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)" 10.12.11.254 - - "GET / HTTP/1.0" 200 5768 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 10.12.11.254 - - "GET / HTTP/1.0" 200 5768 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0"

На сайте ничего нет, а я знаю о посетителе более чем достаточно. Всё потому что «логи знают всё» .

Немного практики

Итак, решено - подставляем фейковый UA . Но как его сформировать? Я пошел по пути собирания с десятка UA каждого интересующего браузера, и написания регулярки для каждого, которая будет генерировать максимально правдоподобный и в то же время а какой-то мере уникальный отпечаток. Хотите пример? Вот вам 10 UA браузера «IE 9», и среди них пять настоящих. Сможете отличить?

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112) Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident/5.0; .NET CLR 3.8.50799; Media Center PC 6.0; .NET4.0E) Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 8.1; Trident/5.0; .NET4.0E; en-AU) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 8.0; WOW64; Trident/5.0; .NET CLR 2.7.40781; .NET4.0E; en-SG) Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 8.0; Win64; x64; Trident/5.0; .NET4.0E; en) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.0; Trident/5.0; .NET CLR 2.2.50767; Zune 4.2; .NET4.0E) Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0
Да, это возможно, но для это нужно анализировать. Анализировать, например, какие.net могут стоять на каких ОС, анализировать версии и сочетания, нюансы. Когда они теряются в куче - задача становиться мало тривиальной. Кому интересно как выглядят регулярки - добро пожаловать по этой ссылке . Дня генерации использовал randexp.js (за подсказку спасибо хабрачуваку под ником ).

Вообще расширение успешно выдает себя за следующие браузеры:

  • IE с 6 по 10;
  • Chrome (Win / Mac / Linux);
  • Firefox (Win / Mac / Linux);
  • Safari (Win / Mac / Linux);
  • Opera (Win / Mac / Linux);
  • iPad и iPhone.
Что ещё интересного? Автоматизация . Отмечаешь галочками какие браузеры мы имитируем, ставишь галочку «Обновлять автоматически», указываешь интервал времени, и забываешь. Ничего лишнего. Для любопытных - посмотрите в консоли «фоновую страницу» - там всё не плохо залогировано.

Открытые исходники. Если есть желание допилить под себя, всё что необходимо, это:

  1. Открыть ссылку расширения на гитхабе;
  2. Нажать «Download Zip» или склонировать;
  3. На странице расширений поставить чекбокс «Режим разработчика»;
  4. Нажать «Загрузить распакованное расширение...» и указать путь к распакованному архиву или клону;
Буду очень признателен конструктивной критике и предложениям.

Лучше один раз увидеть.

Что же такое Browser Fingerprint? Или идентификация браузеров. Очень простая формулировка — это присвоение идентификатора браузеру. Формулировка простая, но идея очень сложная и интересная. Для чего она используется? Для чего мы хотим присвоить браузеру идентификатор?

  • Мы хотим учитывать наших пользователей. Мы хотим знать, пришел ли пользователь к нам первый раз, пришел он во второй раз или в третий. Если пользователь пришел во второй раз, мы хотим знать, на какие страницы он заходил, что он до этого делал. С анонимными пользователями это невозможно. Если у вас есть система учета записей, пользователь логинится, мы все про него знаем — мы знаем его учетную запись, его персональные данные, мы можем привязать любые действия к этому пользователю. Здесь все просто. В случае с анонимными пользователями все становится гораздо сложнее.
  • Второй сценарий — персональная реклама. Это сейчас везде. Мы заходим, и вдруг нам показывают рекламу каких-нибудь пирожков, которые мы хотели купить еще вчера. Как это делается? Это делается через идентификацию пользователей.
  • Третий сценарий — внутренняя аналитика. Если вы используете, помимо Google Analytics или Яндекс, собственную самописную систему аналитики, Fingerprint JS и Browser Fingerprint, в целом, может вам помочь в достижении почти полной идентификации анонимных пользователей. Вы сможете увидеть, что пользователь делал на вашем сайте, на какие страницы заходил, какие ссылки он щелкал и т.д. И построить на основе этого целую картину, карту действий пользователя. Все это достигается при помощи этой техники — Browser Fingerprinting.

Почему бы для этой цели не использовать просто http cookie? Ведь это очень просто, и все это умеют делать. Работает это, вы все знаете как.

Пользователь приходит на ваш сайт, мы читаем его cookie, если там есть какой-то идентификатор, значит, он у нас уже был, и мы знаем, кто он такой. Мы выполняем всю нашу аналитику, трекинг и т.д. в привязке к этому пользователю.

Если там идентификатора нет, значит, пользователь пришел к нам впервые. Мы генерируем идентификатор уникальный, GUI, бинарную строку какую-то, записываем это в cookie, и потом, когда пользователь придет в следующий раз, мы этот cookie прочитаем и поймем, что этот пользователь к нам пришел во второй, третий и последующий разы.

У сookie есть один большой недостаток — его можно очистить. Любой, даже технически неподкованный пользователь знает, как очищать cookie. Он нажимает «Настройки», заходит и очищает. Все, пользователь становится опять для вас анонимным, вы не знаете, кто он такой.

Все современные браузеры, даже Internet Explorer, кажется, предлагают режим инкогнито. Это такой режим, когда ничего не сохраняется, и когда пользователь посетил ваш сайт в этом режиме, он не оставляет никаких следов. Следующий раз, когда он зайдет в режиме инкогнито, вы опять же не узнаете, кто он такой и был ли он у вас до этого. Т.е. в режиме инкогнито http cookie работать не будут.

В настоящее время в связи с популярностью таких персонажей как Сноуден и т.д. многие предпочитают разные режимы приватности, анонимности в Интернете, режимы, плагины и что угодно. Все это препятствует трекингу и идентификации в Интернете. Многие пользователи этим пользуются, даже не понимая, зачем. Просто устанавливают, просто потому, что это модно. И они становятся для вас опять же анонимными. Http cookie в этом случае работать не будут.

Как программисты пытались и пытаются решить эту проблему?

Наиболее успешным проектом в сфере сохранения информации в cookie так, чтобы невозможно было ее удалить, на мой взгляд, является проект evercookie, или persistent cookie — неудаляемый cookie, трудно удаляемый cookie. Суть его заключается в том, что evercookie не просто хранит информацию в одном хранилище, таком как http cookie, он использует все доступные хранилища современных браузеров. И хранит вашу информацию, например, идентификатор. Начинает он использовать http cookies, записывает идентификатор туда, затем, если в браузере доступен Flash, он использует local shared objects для записи информации в т.н. Flash cookies.

Flash cookies до недавнего времени не очищались, когда вы очищали cookie. Лишь последние версии Google Chrome умеют очищать Flash cookie, когда вы очищаете обычные cookie. Т.е. до недавнего времени Flash cookies были практически неудаляемыми. Существовала специальная страница на сайте macromedia, куда нужно было зайти, нажать кнопку: «Да, я хочу очистить Flash cookies», и тогда они очищаются, т.е. без этой страницы было очистить невозможно.

Далее, evercookie использует Silverlight Cookies. По-другому они называются Isolated Storage. Это специальное выделенное место на жестком диске компьютера пользователя, куда пишется cookie информация. Найти это место невозможно, если вы не знаете точный путь. Оно прячется где-то в документах, Setting’ах, если на Windows, глубоко в недрах компьютера. И эти данные удалить, при помощи очистки cookie невозможно.

Далее. Evercookie использует такую инновационную технику как PNG Cookies. Суть заключается в том, что браузер отдает картинку, в которой в байты этой картинки закодирована информация, которую вы сохранили, например, идентификатор. Эта картинка отдается с директивой кэширования навсегда, допустим, на следующие 50 лет. Браузер кэширует эту картинку, а затем при последующем посещении пользователем при помощи Canvas API считываются байты из этой картинки, и восстанавливается та информация, которую вы хотели сохранить в cookie. Т.о. даже если пользователь очистил cookie, эта картинка с закодированным cookie в PNG по-прежнему будет находиться в кэше браузера, и Canvas API сможет ее считать при последующем посещении.

Evercookie использует все доступные хранилища браузера — современный HTML 5 стандарт, Session Storage, Local Storage, Indexed DB и другие.

Также используется ETag header — это http заголовок, очень короткий, но в нем можно закодировать какую-то информацию, и если установлен Java, то используется java presistence API.

Evercookie — очень умный плагин, который может сохранять ваши данные практически везде. Для обычного пользователя, который не знает всего этого, удалить эти cookies просто невозможно. Нужно посетить 6-8 мест на жестком диске, проделать ряд манипуляций для того, чтобы только их очистить. Поэтому обычный пользователь, когда посещает сайт, который использует evercookie, наверняка не будет анонимным.

Несмотря на все это, evercookie не работает в инкогнито режиме. Как только вы зашли в инкогнито режим, никакие данные не сохраняются на диске, потому что это основополагающая суть инкогнито режима — вы должны быть анонимными. А еvercookie использует хранение на жестком диске, которое в этом режиме не работает.

FingerprintJS — это маленькая библиотечка, которую я написал, и которая пытается решить эти проблемы. Я расскажу, как она это делает, и что из этого получилось.

Написал я ее в 2012 году. Я тогда работал в «КупиКупон» Ruby разработчиком. И у меня была задача сделать такую систему аналитики, чтобы учитывать не просто залогиненных пользователей, т.е. тех пользователей, которые есть у нас в системе, а также анонимных пользователей. Конкретно на сайте «КупиКупон» было много анонимных пользователей, потому что люди часто приходили извне посмотреть на какие-то купоны, скидки, предложения, у них ни у кого не было учетной записи, и поэтому система трекинга, система отслеживания посещаемых страниц, нажатия на кнопки — все это не работало, потому что пользователи были анонимными.

FingerprintJS, вообще, не использует cookie. Никакая информация не сохраняется на жестком диске компьютера, где установлен браузер. Работает в инкогнито режиме, потому что в принципе не использует хранение на жестком диске. Не имеет зависимостей, работает даже без jQuery, и размер — 1,2 Кб gzipped.

На данный момент используется в таких компаниях как Baidu, это Google в Китае, MasterCard, сайт президента США, AddThis — сайт размещениz виджетов и т.д.

Эта библиотека быстро стала очень популярной. Она используется примерно на 6-7% всех самых посещаемых сайтов в Интернете на данный момент.

Как она работает, расскажу детально. Суть ее в том, что код этой библиотеки опрашивает браузер пользователя на предмет всех специфичных и уникальных настроек и данных для этого браузера и для этой системы, для компьютера. Эти данные объединяются в огромную строку, затем они подаются на вход функции хэширования. Функция хэширования берет эти данные и превращает их в компактные красивые идентификаторы. Как детально это работает, я расскажу.

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

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

Считывается часовой пояс, это количество минут от UTC:

Это –3, получается Москва.

Затем происходит получение всех поддерживаемых HTML5 технологий, т.е. у каждого браузера поддержка отличается. FingerprintJS пытается определить, какие поддерживаются, какие — нет, и для каждой технологии результат опроса наличия этой технологии и степень ее поддержки прибавляется к итоговой функции отпечатка.

SessionStorage, LocalStorage, IndexedDB, OpenDatabase и другие всевозможные.

Опрашиваются данные, специфичные для пользователя и для платформы, такие как настройка doNotTrack (очень иронично, что настройка doNotTrack используется как раз для трекинга), cpuClass процессора, platform и другие данные.

Здесь у вас может возникнуть закономерный вопрос — ведь у очень многих пользователей эти данные они одинаковые? Допустим, пользователь живет в Москве, у него будет одинаковый язык, последний Chrome, у него будет все практически одинаково, и все эти строки, которые были получены на данном этапе, будут одинаковые. Как это поможет идентифицировать пользователя?

Есть еще 2 способа, которые добавляют уникальности.

  • Первый — это информация о плагинах. Код опрашивает наличие всех установленных плагинов в системе. Для каждого плагина получается его описание и название.А также, что очень важно, список всех мультимедиа типов или main типов, которые поддерживают этот плагин. Вся эта информация объединяется в огромный массив строк, и этот массив тоже конкатенируется и прибавляется к строке отпечатка. Как вы понимаете, на каждом компьютере список плагинов свой, достаточно уникальный, и версии плагинов могут быть свои, и список поддерживаемых main типов тоже будет свой.

  • Следующее — к строке отпечатка прибавляется т.н. Сanvas Fingerprint. Это еще одна техника, которая позволяет повысить точность. Суть ее заключается в том, что на скрытом Сanvas элементе рисуется определенный текст с определенными наложенными на него эффектами. И затем полученное изображение сериализуется в байтовый массив и преобразовывается в base64 при помощи вызова canvas.toDataULR().
У вас тут возникает вопрос: как это тоже помогает идентифицировать? Неожиданное для меня было исследование, которое я нашел. Оно говорит о том, что прорисовка шрифтов, в частности, в Canvas API, очень платформозависима. Внешне идентичные одинаковые изображения, нарисованные в разных браузерах, будут преобразованы в разный байтовый массив. Почему? Это зависит от процессора, видеокарты, драйверов видеокарты, системных библиотек, таких как direct X, систем отрисовки шрифтов, теней — все это на каждом компьютере может быть свое, поэтому результирующий байтовый массив будет отличаться практически на каждом компьютере, где будет разная аппаратная и программная начинка. И эта длинная строка, полученная при сериализации Сanvas будет присоединена к итоговому отпечатку, и мы получим огромную строку.

Тут показано, как это работает. Мы получаем все эти данные. Потом мы передаем их в функцию хэширования, в FingerprintJS используется nomo hash2, и на выходе мы получаем 32-х битное число. Это и есть ваш идентификатор. Т.о., когда пользователь заходит на наш сайт, ему присваивается номер. Этот номер вы считываете и используете, как хотите, — вы базируете на нем свою аналитику и т.д.

Тут вопрос: насколько уникально и точно определение? Исследование, за основу которого было взято, было сделано компанией Electronic Frontier Foundation, у них был проект Panopticlick. Оно говорит, что уникальность составляет порядка 94%, но на реальных данных, которые были у меня, уникальность составляла около 90%-91%.

Библиотеку стало использовать много людей и компаний, и с течением времени выявился ряд недостатков. Т.е. она неидеальна, у нее есть недостатки. Самый главный недостаток — то, что точность идентификации только 90%, но есть и другие недостатки.

  1. UserAgent. У современных браузеров UserAgent меняется очень часто, каждые два месяца выходит новая версия Google Chrome. UserAgent будет меняться, потому что та версия Google Chrome, которая защита в UserAgent будет отличаться. А это означает, что UserAgent будет влиять на итоговый отпечаток. Если выходит новый браузер, итоговый отпечаток изменится, потому что с точки зрения FingerprintJS это будет новый пользователь.
  2. IPhone, IPad и другие продукты Apple. Дело в том, что они очень униформенные, одинаковые с точки зрения аппаратной реализации. У них у всех одинаковые процессоры. Если мы возьмем, конечно, отдельно взятую модель, допустим IPhone 5S, у всех IPhone 5S будет одинаковый процессор, одинаковый графический ускоритель и одинаковые системные библиотеки, и плагины там будут одинаковые, но на самом деле их там нет. Это означает, что тот байтовый массив, полученный с Сanvas Fingerprint, будет одинаков для всех версий IPhone 5S, а это значит, что точность идентификации для продуктов Apple будет ниже.
  3. Internet Explorer и Китай. Не подозревал о существовании этой проблемы, но потом я узнал, что используется в Китае очень много старых версий IE, и для того, чтобы получить список плагинов, нужно иметь названия всех плагинов заранее. Потому что для того, чтобы проверить, есть плагин или нет, в IE просто невозможно вызвать, например, navigator.plugins. Это не будет работать. Нужно взять и каждый плагин попытаться инстанциировать как active ex объект. Если он создался, то значит все хорошо. Если выброшена ошибка, значит, что плагины в IE не установлены. Список плагинов для IE у меня был, но он был коротким — порядка десяти плагинов. У меня не было определения тех плагинов, которые популярны в Китае, таких как QQ, baidu и др. Там очень много плагинов, которые используются только там. Эти плагины я не проверял, и список плагинов для Китая конкретно был меньше.
  4. Другой недостаток первой версии — это отсутствие интеграции с Flash и Silverlight, а интеграция с этими плагинами позволяет улучшить качество Fingerprint.
  5. И последняя, но достаточно серьезная вещь, которая недавно обрушилась на FingerprintJS, — это то что, начиная с версии 42, Google Chrome просто перестал активировать все те плагины, которые работают через NPAPI. NPAPI — это очень старый API для инстанциирования плагинов, он был разработан еще компанией «Nextkey». Он так и назывется — «Nextkey plugin API». Все плагины, которые работают и опираются на этот протокол, на этот API, перестали загружаться, и поэтому ни Silverlight, ни Java, а эти два плагина наиболее популярны, которые работают через NPAPI, не отображаются в FingerprintJS — они ни коем образом не определяются, и список их main типов тоже не отображается. Это значит, что в Chrome 42 и старше точность FingerprintJS снижена за счет этой проблемы.
Поэтому, проанализировав все это, а сейчас я тоже использую FingerprintJS, я пришел к выводу, что пора разрабатывать новую библиотеку, которая будет практически лишена всех существующих недостатков.

Я ее начал делать совсем недавно, разработка ведется на github.

Как она решает существующие проблемы? Самое главное — используется фазихэширование или localsensitivehash, или нечеткое хэширование. Такое хэширование, которое не меняется, даже если в обычном хэшировании, если вы измените хотя бы один байт входящей информации, выходящая строка тоже изменится, причем кардинальным образом. В фазихэшировании этого не происходит, тут есть порог чувствительности, когда определенный процент входящих данных может измениться, что не повлияет на исходящий отпечаток. Допустим, если поменялась в UserAgent только версия браузера, это случается очень часто, допустим, в Chrome, то результирующий отпечаток будет одинаковым, потому что версия составляет 3 или 5 % от общей длины от UserAgent.

Второе — в FingerprintJS 2 используется определение установленных шрифтов, всех шрифтов, которые установлены в системе. Чем это полезно? Если вы поставили программу, допустим, adobe pdf, то вы добавляете в систему шрифты.

Если вы поставили Microsoft Office, вы добавляете в систему шрифты; если вы поставили какой-нибудь Quick office, который имеет собственные шрифты, вы опять же добавляете в систему шрифты. И поэтому у вас может быть два абсолютно одинаковых компьютера, но на одном установлен Office, а на другом — нет. Это значит, что на первом, где нет Office, будет 320 доступных шрифтов, а, где есть Office — 1700 шрифтов. И значит, что вы сможете получить все шрифты, которые есть на этом компьютере, опять же, для итогового отпечатка. Это будет два разных отпечатка, потому что шрифты разные.

По умолчанию используется Flash, маленький swf файл размером 916 байт. Он получает список всех установленных шрифтов, причем в платформозависимом порядке, т.к. они доступны в системе, так они и будут возвращены. Если Flash не установлен, используется такая техника, она называется site chanel technic. Она впервые была опубликована на сайте lalit.org. Это определение наличия шрифта с помощью javascript only. Как это делается? Для каждого референтного шрифта, который задан по умолчанию в браузере или в системе, измеряется его ширина и высота, и этот массив ширины и высоты сохраняется. Затем к скрытому тексту (текст, кстати, огромный, допустим, 72 пикселя) применяется другой шрифт. Если этот шрифт есть в системе, текст изменит свои габариты правильно, и код, который изменяет высоту и ширину, получит новый массив, с высотой и шириной. Если он отличается от референтного, от того, который был получен при запросе дефолтного шрифта, значит, этот шрифт установлен. Если не отличается, значит, этого шрифта нет.

Очень простая идея, но она работает. На данный момент этот код может достоверно определить около 500 шрифтов без использования Flash. И, соответственно, тот компьютер, где есть Microsoft Office, и тот, где его нет, будут по-разному определены в FingerprintJS 2 за счет этой техники.

Третье отличие — WebGL Fingerprint. Это развитие идеи Сanvas Fingerprint. Суть его заключается в том, что рисуются 3D треугольники (на слайде не очень хорошо видно, но это 3D). На него накладываются эффекты, градиент, разная анизотропная фильтрация и т.д. И затем он преобразуется в байтовый массив. Результирующий байтовый массив, как и в случае с Canvas Fingerprint, будет разный на многих компьютерах. Потом к этому байтовому массиву еще добавляется информация о платформозависимых константах, которые определены в WebGL. Т.е. в WebGL есть набор констант, которые должны быть обязательно в реализации. Это глубина цвета, максимальный размер текстур… Этих констант очень много, их десятки. Код опрашивает все эти константы и, понятное дело, что на android-девайсах эти константы будут отличаться, там глубина цвета может быть другой, чем на Windows или чем на linux’е. Он опрашивает все эти константы, все это опять же складывается в огромный массив, и все это добавляется к сериализованному изображению 3D треугольника, который нарисован при помощи аппаратных эффектов.

Тут тоже такой вопрос: как это помогает идентифцировать? 3D графика очень платформозависима, версия драйверов, версия видеокарты, стандарт OpenGL в системе, версия шейдерного языка, — все это будет влиять на то, как внутри будет нарисовано это изображение. И когда оно будет преобразовано в байтовый массив, оно будет разное на многих компьютерах.

Почему WebGl Fingerprint важен? Потому что IOS 8.1 поддерживает WebGL, а это помогает идентифицировать IOS девайсы, о проблеме идентификации которых я упоминал. Поэтому WebGL повышает точность Fingerprint.

Что еще предстоит реализовать?

Как я говорил, библиотека находится в разработке и не все вещи, которые я бы хотел в ней сделать, сделаны. Вокруг нее уже есть небольшое сообщество разработчиков. Я, кстати, приглашаю всех желающих участвовать в разработке — она очень интересная, мы очень неформальны, каждый предлагает идеи, там достаточно интересно.

Что предстоит еще реализовать? WebRTC Fingerprinting.

WebRTC — это стандарт peer-to-peer коммуникаций через аудиопотоки, или это стандарт аудиокоммуникаций в современных браузерах. Он позволяет делать аудиозвонки и т.д., он поддерживается в FireFox и будет скоро поддерживаться в других браузерах.

Реализация WebRTC стандарта тоже платформозависима, она будет зависеть от той видеокарты, которая установлена в системе, от драйверов на звук и т.д. Поэтому, измеряя разные уровни латентности, разные уровни поддержки WebRTC и констант, которые зашиты в этом формате, можно получить разные итоговые отпечатки для разных компьютеров.

Будет использоваться больше плагинов для IE. Будут использованы те плагины, которые популярны в разных странах — Китае, Индии и т.д., т.е. растущие информационные рынки. В первой версии недостаточно внимания было уделено этой проблеме, а во второй версии это будет решено.

Больше информации будет собираться об ОС. Как мы это будем делать? Будет использоваться интеграция с Flash и Silverlight. Flash позволяет получать информацию о системе, такую как версия ядра, патч левел ядра. Silverlight, если на Windows, позволяет получить версию Windows, bild, номер Windows, все это доступно через Silverlight.

Пару слов о Silverlight, почему интеграция с sliverlight тоже достаточно важна? Может быть, в России Silverlight плагин не очень популярен, но в США, например, есть сервис стримингового видео Netflix, который транслирует видео, и я знаю точно, что они используют Silverlight. Ввиду того, что он поддерживает DRM (это система ограничения цифровых прав на контент), т.к. Netflix часто показывают разные свежие голливудские фильмы, они используют Silverlight для того, чтобы это видео не расходилось по Интернету. Поэтому в США у многих десктопных пользователей Интернета установлен Silverlight плагин, который, кстати, доступен и на Mac’е тоже, помимо Windows.

Будет реализовано определение наличия нескольких мониторов. Если мы запросим размеры через javascript, то получим просто два числа — это ширина и высота экрана. Если мы сделаем то же самое через Flash API, Actionscript API, мы получим массив массивов. Это значит, что если установлено несколько мониторов, где каждый подмассив — это будет размер экрана каждого монитора. Если разработчик сидит за пятью мониторами, он получит массив массивов из пяти элементов, т. о., мы узнаем, что человек сидит за пятью мониторами, а не за основным монитором, который вернул бы javascript.

Все эти данные в совокупности позволяют на данный момент получить точность определения порядка 94-95%. Но, как вы понимаете, это недостаточная точность идентификации. Тут встает вопрос: каким образом это можно улучшить, и можно ли это улучшить? Я считаю, что можно. Цель этого проекта — достичь 100% идентификации так, чтобы можно было опираться на Fingerprint в 100% случаях и гарантированно сказать: «Да, этот пользователь к нам приходил; да, я все о нем знаю, несмотря на то, что он использует инкогнито mode, tor сеть…». Не важно, все это будет определено.

Чтобы распознать строку useragent, воспользуйтесь онлайн формой ниже. Вставьте свою строку в поле User agent , или нажмите ссылку Мой user agent , чтобы узнать и распознать строку своего веб-браузера.

Внимание! JavaScript отключен.
Без включенной поддержки JavaScript функция User Agent работать не будет .
Включите в своём браузере поддержку JavaScript и обновите страницу.

  • User Agent детали:

Что такое User Agent?

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

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

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

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

Данные из user agent используют веб-сервера, для определения версии браузера, чтобы отобразить наиболее корректно веб-страницу. Хоть этот метод уже и устарел, некоторые сайты продолжают использовать его для определения мобильных устройств. На смену такому способу пришел адаптивный дизайн.

Как изменить user agent?

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

Как изменить user agent в Mozilla Firefox

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

Как изменить user agent в Chrome

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

Как изменить user agent в Opera

Актуально для версии Opera 12.15 и выше. Необходимо в адресной строке набрать opera:config#UserPrefs|CustomUser-Agent и заполнить выделенное поле "Custom User-Agent" новым значением для строки user agent. Затем необходимо прокрутить страницу в самый низ, нажать "Сохранить".

Как изменить user agent в Safari

Актуально для версии Apple Safari 5.1.7 и выше. Необходимо зайти в меню "Разработка". Чтобы увидеть панель меню, необходимо нажать Alt. Если не отображается меню "Разработка", его необходимо включить, для этого зайдите в меню "Правка" - "Настройки", перейдите во вкладку "Дополнения" и поставьте галочку напротив "Показывать меню разработка в строке меню". После опять нажмите Alt и выберите "Разработка" - "Пользовательский агент". На выбор уже представлены некоторые варианты, если ни один не подошел, выбирайте "Другой" и вписать свою строку user agent.

Как изменить user agent в Internet Explorer

Актуально для версии Internet Explorer 10 и выше. Необходимо нажать F12, откроется панель "Средства разработчика", выбрать меню "Сервис" - "Изменить строку агента пользователя". Уже, на выбор, представлено несколько вариантов, если ни один не подошел, то выбирайте "Особая...". В поле "Понятное имя" ввести любое имя, а в поле "Строка агента пользователя" ввести нужную строку user agent. Затем нажать "Добавить", выбрать её в списке и нажать "Установить". Единственный недостаток этого способа в том, что действует он временно, до закрытия веб-браузера, после нового запуска браузера необходимо опять нажать F12 и выбрать созданный вариант из списка быстрого выбора.

Еще способ изменить строку user agent - это исправить её в реестре, тогда установки сохраняются и после закрытия браузера, но есть минусы данного способа. Изменить строку user agent на совершенно произвольную не получится. Дело в том, что эта строка состоит из разных значений реестра, которые отделены друг от друга точкой с запятой (";"). Если значение нужно поменять для всех пользователей, то это HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\ User Agent\ , а для одного текущего пользователя здесь HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\ User Agent\ . По умолчанию там только один ключ По умолчанию (default). Необходимо создать три "строковых параметра" Compatible , Platform и Version . Чтобы изменения вступили в силу, необходимо перезагрузить браузер. Установите для примера данные значения:

  • По умолчанию = "Mozilla/5.0"
  • Compatible = "compatible"
  • Platform = "Windows NT 6.1"
  • Version = "MSIE 10.0"

В зависимости от необходимости замените указанные значения на нужные и не забудьте перезапустить браузер. Более подробно об этом можно прочитать на сайте Microsoft .

Как изменить User Agent на мобильных устройствах

Во многих мобильных устройствах уже предусмотрены изменения useragent строки с помощью стандартных настроек веб-браузера.

Как изменить User Agent в стандартном браузере для Android

В стандартном браузере Android строка useragent изменяется в настройках браузера, опция UAString. Но по умолчанию этот пункт меню скрыт. Для отображения данного меню, необходимо набрать в адресной строке about:debug и нажать Поиск или Go (на виртуальной клавиатуре). Затем заново зайти в настройки: Настройки » UAString, теперь данная опция доступна для выбора.

Как изменить User Agent в Dolphin Browser

Актуально для версии Dolphin Browser 11.4.2 и выше. Изменения предусмотрены стандартными настройками в меню "Настройки" » "Специальные" » "Персонализация" » "Пользовательский агент". На выбор представлены сразу несколько вариантов: "Android", "Рабочий стол", "iPhone", "iPad", "Пользовательский". Последний вариант позволяет ввести произвольную useragent строку.

Как изменить User Agent в PHP

Актуально для версии PHP 5.6 и выше. User Agent в PHP можно изменить двумя способами. Первый, это в файле php.ini, изменить параметр user_agent . Второй способ, это во время выполнения скрипта использовать stream_context_create .

Пример использования для file_get_contents() :

$opts = [ "http" => ["user_agent" => "my user agent"] ]; $context = stream_context_create($opts); file_get_contents("http://example.com/", false, $context);

Пример использования для Soap Client:

$opts = [ "http" => ["user_agent" => "my user agent"] ]; $context = stream_context_create($opts); $soapclient = new SoapClient("http://example.com/wsdl/", ["stream_context" => $context]);

Примеры строк User Agent

Desktop браузеры:

  • Mozilla Firefox 36 (Win 8.1 x64): Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
  • Google Chrome 53 (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
  • Google Chrome 40 (Win 8.1 x64): Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
  • Opera 40 (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62
  • Opera 12.17 (Win 8 x64): Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17
  • Apple Safari 5.1 (Win 8 x64): Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
  • Internet Explorer 11 (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
  • Internet Explorer 11 (Win 8.1 x64): Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASU2JS; rv:11.0) like Gecko
  • Microsoft Edge (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586

Мобильные браузеры:

  • iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25
  • Android 2.3.5 (Philips W632): Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; Philips W632 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Планшеты:

  • iPad: Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25

Поисковые системы:

  • Яндекс: Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)
  • Google: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Bing: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  • Yahoo! Slurp: Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
  • Mail.ru: Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/Fast/2.0; +http://go.mail.ru/help/robots)
  • Sputnik: Mozilla/5.0 (compatible; SputnikBot/2.3; +http://corp.sputnik.ru/webmaster)

Роботы, боты, анализаторы:

  • Ahrefs: Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)
  • Majestic: Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)
  • SMTBot: Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)
  • linkdex: Mozilla/5.0 (compatible; linkdexbot/2.2; +http://www.linkdex.com/bots/)
  • Exabot: Mozilla/5.0 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)
  • StatOnline.ru: Mozilla/5.0 (compatible; StatOnlineRuBot/1.0)