Blog. Just Blog

Обнаружение headless-браузеров

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Обнаружение headless-браузеров
Обнаружение headless-браузеров

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

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

Начнем с самого простого - проверка наличия строки "headless" в названии браузера и/или в его версии.
  1. var test1=(/headless/i.test(window.navigator.userAgent))?1:0;
  2. var test2=(/headless/i.test(window.navigator.appVersion))?1:0;
Для обнаружения примитивного "коробочного" вызова серверного Chrome этого достаточно. Но стоит добавить в параметры вызова собственное название User Agent, как этот метод сразу же отваливается. Гугловые пауки таким образом маскируются под вполне себе десктопный браузер. Но совсем игнорировать этот способ обнаружения не надо, он имеет право на существование.

Более интересный способ обнаружения основан на том, что у "безголового" Chrome отсутствует объект window.chrome, обязательный для любого десктопного или мобильного браузера, созданного на движке WebKit. Осталось только найти способ, чтобы гарантированно определять наличие движка WebKit. И такой способ есть.
  1. var test3=(eval.toString().length==33 && !window.chrome)?1:0;
Конструкция eval.toString().length под разными браузерными движками возвращает разные значения, для WebKit-браузеров это фиксированное значение 33. Таким образом, если браузер использует WebKit, но при этом не имеет определенного объекта window.chrome, то можно с уверенностью говорить об использовании "безголового" браузера.

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

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

Поделиться ссылкой ВКонтакте
Просмотров: 1794 | Комментариев: 4

Метки: JavaScript
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (04.09.2023 в 17:02):
И зачем здесь эта информация?
dmytro (04.09.2023 в 16:57):
firefox содержит
window.netscape, window.mozInnerScreenX
ManHunter (17.02.2022 в 07:51):
Пока нарабатываю статистику по заходам на клиентской стороне, потом все это дело как-то состыкую со статистикой по серверными заходами.
by matrixa (16.02.2022 в 14:09):
Тема вполне уместная и очень болезненная, начала положено, удачи в изысканиях!

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0047 сек.) / Память: 4.5 Mb
Наверх