Как боты парсят ваши сайты и обходят защиту? Рассказываем в деталях

Меня зовут Максим Кульгин и моя компания xmldatafeed занимается парсингом сайтов в России порядка четырех лет. Ежедневно мы парсим более 500 крупнейших интернет-магазинов в России и на выходе мы отдаем данные в формате Excel/CSV и делаем готовую аналитику для маркетплейсов.

Хочу показать некоторые достаточно простые приемы, с помощью которых можно обходить защиту на сайтах и парсить данные более-менее успешно.

Почему «более-менее»? Дело в том, что есть разные способы защитить свои данные от парсинга (или несанкционированного сбора). За много лет мы сталкивались с большим количеством решений, которые можно ранжировать от «безумных» (например, сайт отдает 30 страниц, а дальше IP — адрес блокирует на сутки, сильно замедляя парсинг), до очень простых, когда сайт может иногда попросить решить капчу. К каждому сайту нужен свой подход, но еще не встречались сайты, которые вообще нельзя парсить. Другое дело, что парсинг можно усложнить настолько, что вы просто физически в разумное время не сможете собрать данные, особенно если их много. Сразу подчеркну, что я за «человеческий» парсинг, который собирает данные, но не создает на сайте неподъёмной нагрузки по типу ddos. Статья ниже ориентирована на людей, которые сами не занимаются парсингом профессионально, но хотят понять основные механизмы, которые лежат в его основе.

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

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

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

Старайтесь учитывайть содержимое файла Robots.txt

Лучше всего, если при парсинге «пауки» придерживаются файла robot.txt соответствующего сайта. В нем прописаны конкретные правила «примерного поведения», как например: насколько часто вы можете запрашивать данные, на каких веб-страницах разрешается собирать их, а на каких это запрещено. Некоторые сайты разрешают поисковику Google собирать данные, не разрешая делать это кому-то еще. Эта мера противоречит открытой природе Интернета и может казаться несправедливой, но владельцы сайтов имеют право прибегать к ней.

Вы можете найти примеры файла robot.txt на различных сайтах. Обычно этот файл находится в корневой директории сайта, например в http://example.com/robots.txt.

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

User-agent: *

Disallow:/

Однако поскольку большинство владельцев сайтов хотели бы, чтобы их сайты присутствовали в поисковой выдаче Google или Яндекса, — пожалуй, крупнейших в мировом масштабе парсеров сайтов, они всё-таки открывают ботам и «паукам» доступ к сайтам.

Что делать, если вам нужны какие-либо данные, доступ к которым запрещен в robots.txt? Вы всё равно можете собрать эти данные. Большинство инструментов для защиты от парсинга противодействуют ему, когда вы собираете данные на веб-страницах, автоматический доступ к которым не разрешен в robots.txt.

Является ли пользователь сайта ботом или реальным посетителем, — вот что стремятся выяснить эти инструменты. И как они это делают? Они ищут несколько показателей, которые характерны для живых пользователей, но не характерны для ботов. Люди ведут себя бессистемно в отличие от ботов. Люди непредсказуемы в отличие от ботов.

Вот несколько очевидных признаков, по которым бот, парсер или веб-сканер обнаруживает себя:

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

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

Замедлите сбор данных, не перегружайте сервер, хорошо «обращайтесь» с сайтами

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

Сделайте своего «паука» похожим на реального пользователя, имитируя действия человека. Поместите несколько случайных программных периодов бездействия между запросами, добавьте несколько задержек после сбора небольшого количества веб-страниц и выберите как можно меньшее число параллельно отправляемых запросов. Будет идеально добавить задержку в 10–20 секунд между программными кликами и не слишком сильно нагружать сайт, обращаясь с ним по-человечески.

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

Не используйте одну и ту же схему сбора данных

Как правило, люди не выполняют повторяющиеся задачи, так как просматривают сайт, действуя непредсказуемо. У ботов для сбора данных обычно одна и та же модель поведения при сканировании и сборе данных, потому что они так запрограммированы, если только в них не заложены какие-либо уникальные алгоритмы действий. Сайты с интеллектуальными средствами защиты от сбора данных могут легко обнаруживать «пауков», выявляя закономерности в их действиях и таким образом препятствуя парсингу данных.

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

Отправляйте запросы через прокси-серверы и при необходимости выполняйте их ротацию

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

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

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

Есть несколько методов изменения вашего IP-адреса, с которого отправляются запросы на целевой сайт:

  • TOR (это легко обнаруживается)
  • Виртуальные частные сети (VPN’ы).
  • Бесплатные прокси-серверы.
  • Общие («shared») прокси-серверы — самые дешевые и совместно используются множеством пользователей. Высокая вероятность блокировки доступа к целевому сайту.
  • Приватные прокси-серверы — обычно используются только одним человеком. Меньшая вероятность возникновения блокировки при парсинге, если поддерживать низкую частоту обращений к целевому сайту.
  • Серверные (датацентровые) прокси — если вам нужно большое количество IP-адресов, более быстрые прокси-серверы и более вместительные пулы IP-адресов. Они дешевле резидентных прокси-серверов, но сайты могут легко их обнаружить.
  • Резидентные прокси-серверы — если вы делаете очень много запросов к сайтам, которые активно обнаруживают парсеры и запрещают им доступ к данным. Такие прокси-серверы очень дороги и могут работать медленнее, так как представляют собой реальные устройства. Перед тем как использовать резидентные прокси-серверы, попробуйте все остальные варианты.

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

Циклично меняйте пользовательские агенты (строки заголовка User-Agent) и соответствующие HTTP-заголовки у разных запросов

Пользовательский агент — инструмент, который сообщает серверу о том, какой браузер используется. Если пользовательский агент не задан, сайты не позволят вам просматривать контент. Любой запрос, отправленный с помощью браузера, содержит заголовок User-Agent, и постоянное использование одного и того же пользовательского агента ведет к тому, что бот будет обнаружен. Чтобы узнать свой заголовок User-Agent, вы можете набрать в поисковике Google соответствующий запрос. Единственный способ сделать свой User-Agent более похожим на User-Agent реального пользователя и таким образом избежать обнаружения — это подделать его. По умолчанию у большинства парсеров нет пользовательский агента, и вам нужно будет добавить его самостоятельно.

Вы даже можете прикидываться поисковым роботом Google — Googlebot/2.1, если хотите немного поразвлечься (http://www.google.com/bot.html)!

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

Большинство браузеров отправляют сайтам, помимо User-Agent’а, и другие заголовки. Например, ниже представлен набор заголовков, которые браузер отправил на комплект онлайн-тестов «Scrapeme.live». Оптимально будет отправлять в том числе и эти распространенные заголовки запросов.

Как боты парсят ваши сайты и обходят защиту? Рассказываем в деталях

Самыми основными считаются:

  • User-Agent.
  • Accept.
  • Accept-Language.
  • Referer.
  • DNT.
  • Updgrade-Insecure-Requests.
  • Cache-Control.

Не отправляйте файлы cookie, если только они не нужны для обеспечения работы вашего парсера.

Вы можете найти подходящие значения для них, просматривая свой трафик с помощью инструментов разработчика в Chrome или инструмента вроде MitmProxy или Wireshark. Также вы можете скопировать из этих инструментов команду curl и использовать ее для своего запроса. Например:

Как боты парсят ваши сайты и обходят защиту? Рассказываем в деталях

Инструмент наподобие https://curl.trillworks.com может конвертировать вам эту команду в код на любом языке программирования. Вот в какой код на Python она была преобразована:

Как боты парсят ваши сайты и обходят защиту? Рассказываем в деталях

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

Используйте инструмент вроде Puppeteer, Selenium или Playwright для управления браузером в headless-режиме

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

Для этого ему проще всего проверить, может ли клиент сайта (браузер) выполнить блок кода на языке JavaScript. Если клиент сайта на это не способен, то сайт фактически помечает такого посетителя как бота. Хотя можно запретить запуск JavaScript-кода в браузере, почти все сайты в Интернете окажутся в таком случае непригодными для использования, а значит в большинстве браузеров эта функция будет включена.

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

Антипарсинговые инструменты сообразительны и становятся еще умнее с каждым днем, так как боты подают много данных на вход искусственному интеллекту этих инструментов, что позволяет им обнаруживать ботов. Наиболее продвинутые сервисы для защиты от ботов используют более сложные методы считывания «цифровых отпечатков» браузера, обнаруживая с помощью них ботов на стороне клиента, а не просто проверяют, можете ли вы выполнять JavaScript-код.

Инструменты обнаружения ботов ищут любые признаки, которые могут сообщить им, что браузер управляется библиотекой автоматизации:

  • Присутствие признаков, специфических для ботов и демаскирующих их.
  • Поддержка браузером нестандартных возможностей.
  • Признаки использования популярных инструментов автоматизации, как например Selenium, Puppeteer или Playwright.
  • Характерные для человека события, как например произвольные движения мыши, клики, прокрутка веб-страницы, переключения вкладок.

Вся эта информация объединяется, чтобы сформировать уникальный цифровой отпечаток на стороне клиента, который позволяет определить, является ли посетитель сайта ботом или человеком.

Вот несколько обходных вариантов решения проблемы или инструментов, которые могли бы помочь вашему парсеру, основанному на использовании браузера в headless-режиме, избежать обнаружения и блокировки.

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

Опасайтесь приманок (traps)

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

При переходе по ссылкам всегда убеждайтесь в том, что у ссылки задана подходящая видимость и нет тега nofollow. У некоторых ссылок-приманок, предназначенных для обнаружения парсеров, будет задан CSS-стиль display: none, или они будут спрятаны благодаря использованию цвета, который сливается с цветом фона веб-страницы.

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

Проверяйте, меняет ли сайт разметку

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

Например, на сайте 1–20 веб-страниц будут отображать одну разметку, а остальные страницы могут отображать другую. Чтобы справиться с этой проблемой, убедитесь в том, что парсинг данных выполняется с использованием XPath’ов или селекторов CSS. Если это не так, проверьте, как именно отличается разметка, и добавьте в свой программный код условие, согласно которому сбор данных на таких веб-страницах осуществляется по-другому.

Не собирайте данные, будучи в роли авторизованного пользователя сайта

Вход на сайт, или авторизация, — это, по сути, разрешение на получение доступа к данным, размещенным на веб-страницах. Некоторые сайты, как например Indeed и Facebook, не дают такого разрешения.

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

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

Используйте сервисы для решения капч

Многие сайты используют меры, направленные против парсинга данных. Если вы собираете большие объемы данных на каком-то сайте, то в конечном итоге вам запретят к ним доступ. Вы начнете видеть веб-страницы с капчей, а не с данными. Существуют веб-сервисы, как например 2Captcha или Anticaptcha, позволяющие обходить эти ограничения.

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

Как сайт может выявить и пресечь парсинг?

Сайты могут использовать различные механизмы, чтобы определить, что пользователь сайта — парсер, или «паук». Некоторые из этих подходов:

  • Обнаружение чрезмерного объема трафика или высокой частоты обращения к данным, особенно от одного клиента сайта или IP-адреса за короткий отрезок времени.
  • Обнаружение повторяющихся операций, выполняемых на сайте по одной и той же характерной «схеме» просмотра веб-страниц. Этот признак основан на том, что живой пользователь не будет всё время выполнять одни и те же повторяющиеся операции.
  • Проверка на то, используете ли вы для отправки запросов к сайту настоящий браузер, будучи реальным пользователем. Простой тест — выполнение JavaScript-кода. Более продвинутые инструменты могут пойти намного дальше и проверять ваши видеокарты и центральные процессоры 😉, чтобы убедиться, что ваши запросы поступают от браузера настоящего пользователя.
  • Обнаружение посредством использования приманок, которые обычно представляют собой ссылки, отображаемые только для парсера и скрытые от обычного пользователя. Когда парсер пытается получить доступ к ссылке, срабатывает «сирена».

Как быть с таким методом обнаружения и избежать остановки работы парсера?

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

Как узнать, что сайт заблокировал или забанил вас?

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

  • Веб-страницы с капчами.
  • Большие задержки в получении контента.
  • Частое получение HTTP-ответа с ошибками 404, 301 или 50x.

Частое появление следующих кодов состояния HTTP-запросов тоже свидетельствует о запрете доступа к данным:

  • 301 Moved Permanently («перемещен на постоянной основе»).
  • 401 Unauthorized («для получения ответа необходима авторизация»).
  • 403 Forbidden («доступ запрещен»).
  • 404 Not Found («не найден»).
  • 408 Request Timeout («истекло время ожидания»).
  • 429 Too Many Requests («слишком много запросов»).
  • 503 Service Unavailable («веб-сервис недоступен»).

Вот что Amazon.com сообщает в случае запрета доступа к данным:

Чтобы обсудить автоматический доступ к данным Amazon, пожалуйста, свяжитесь с нами по адресу api-services-support@amazon.com.Для получения информации о переходе на наши API, обратитесь к нашему онлайн-магазину API по адресу <ссылка> или к нашему Product Advertising API по адресу <ссылка> в случаях, связанных с рекламой. Извините! Что-то пошло не та! Далее следуют изображения милого пса Amazon.

Также вы можете взглянуть на ответ или сообщение от сайта. Популярные анти-парсинговые инструменты отправляют, например, такие:

Мы хотим убедиться, что имеем дело действительно с вами, а не с роботом.Пожалуйста, щелкните по кнопке-флажку ниже, чтобы получить доступ к сайту.<рекапча>Зачем вообще необходимо это подтверждение? Наше внимание привлекло что-то в поведении вашего браузера.Этому есть различные возможные объяснения:1. Вы просматриваете сайт и делаете щелчки мышью со скоростью, гораздо большей, чем можно было бы ожидать от человека.2. Что-то мешает выполнению JavaScript-кода на вашем компьютере.3. В той же сети, что и у вас, (на том же IP-адресе) замечен робот.Сталкиваетесь с проблемами доступа к сайту? Свяжитесь со службой поддержки или сделайте так, чтобы ваш робот прошел аутентификацию.

или

Пожалуйста, докажите, что вы человек.<капча>В доступе к этой веб-странице было отказано, потому что мы считаем, что вы используете инструменты автоматизации для просмотра нашего сайта.Это могло случиться из-за того, что:1. Выполнение JavaScript-кода отключено или заблокировано расширением, например блокировщиками рекламы.2. Ваш браузер не поддерживает файлы cookie.Пожалуйста, убедитесь, что выполнение JavaScript-кода и файлы cookie включены в вашем браузере и что вы не препятствуете их загрузке.

или

Извините, что прерываем. Пока вы просматривали <наименование сайта>, что-то, связанное с вашим браузером, дало нам повод думать, что вы бот. Это могло случиться по нескольким причинам:1. Вы активный пользователь сайта, перемещающийся по нему со сверхчеловеческой скоростью.2. Вы отключили JavaScript в своем браузере.3. Сторонний плагин браузера, как например Ghostery или NoScript, препятствует выполнению JavaScript-кода. Дополнительная информация доступна в этой статье службы поддержки.После успешного решения представленной ниже капчи вы сразу снова получите доступ к <наименование сайта>.

или

Ошибка 1005 Ray ID: <контрольная сумма (хэш)> • <время>.В доступе отказано.Что произошл? Владелец этого сайта (<наименование сайта>) запретил номеру в автономной системе (ASN’у) <номер>, по которому располагается ваш IP-адрес, доступ к этому сайту.

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

Где сайты могут обнаружить ботов?

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

Вот некоторые из мест и ситуаций, при которых парсер может быть обнаружен:

  • При считывании цифрового отпечатка на стороне сервера с помощью поведенческого анализа.
  • При считывании цифрового отпечатка на стороне клиента или браузера с помощью поведенческого анализа.
  • Сочетание этих двух вариантов на многочисленных доменах и в датацентрах.

Обнаружение на стороне сервера

Это обнаружение ботов начинается на серверном уровне, то есть на веб-сервере сайта или на устройствах облачных сервисов, которые находятся «перед» сайтом на пути следования запросов к нему, отслеживают трафик, а также выявляют и блокируют ботов. Методы считывания цифровых отпечатков, подразделяемые на несколько типов, обычно используются в сочетании и преследуют цель обнаружения ботов на стороне сервера.

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

Считывание цифрового HTTP-отпечатка

Считывание цифрового HTTP-отпечатка осуществляется путем анализа трафика, который посетитель сайта отправляет на веб-сервер. Почти вся соответствующая информация доступна веб-серверу и некоторую ее часть также можно увидеть в журналах (логах) веб-сервера. Такой цифровой отпечаток может предоставить сайту основную информацию о посетителе, как например:

  • User-Agent, сообщающий о том какой браузер и какой версии использует пользователь, как например Chrome, Firefox, Edge, Safari.
  • Заголовки запроса, как например Referer, Cookie, принимаемая браузером кодировка, принимает ли он сжатие gzip и так далее. Всё это представляет собой дополнительные фрагменты данных, которые браузер отправляет серверу.
  • Порядок перечисленных выше заголовков.
  • IP-адрес, через который посетитель отправляет запрос или в конечном итоге обращается к веб-серверу в том случае, если посетитель использует NAT-адрес интернет-провайдера или прокси-серверы.

Считывание цифрового отпечатка данных, связанных со стеком TCP/IP

Данные, которые посетитель отправляет на серверы, приходит на них в качестве пакетов по протоколам TCP/IP. Цифровой отпечаток данных, связанных с TCP, включает в себя следующие подробные данные:

  • Исходный размер пакета (16 битов).
  • Исходный TTL (8 битов).
  • Размер окна (16 битов).
  • Максимальный размер сегмента (16 битов).
  • Величина масштабирования окна (8 битов).
  • Флаг «don’t fragment», то есть «не разбивать на фрагменты» (1 бит).
  • Флаг «sackOK» (1 бит).
  • Флаг «nop» (1 бит).

Эти переменные объединяются в данные в виде цифровой подписи компьютера посетителя сайта, которая позволяет уникальным образом идентифицировать посетителя и определить, бот он или человек. Инструменты с открытым исходным кодом, как, например, p0f, могут сообщить о том, подделан ли User-Agent. Такой инструмент даже может определить, находится ли посетитель сайта за сетью NAT, или у него прямое подключение к Интернету. Также он может узнать текущие настройки браузеров, например языковые настройки.

Считывание TLS-отпечатка

Когда к сайту кто-то обращается безопасным образом по протоколу HTTPS, браузер и веб-сервер генерируют цифровой TLS-отпечаток в процессе рукопожатия SSL. Большинство клиентских User-Agent’ов, например различные браузеры и приложения (Dropbox, Skype и прочие), будут уникальным образом инициировать запрос на рукопожатие SSL, что позволяет считать цифровой отпечаток такой попытки получения доступа к данным.

JA3 — библиотека с открытым исходным кодом для считывания цифрового TLS-отпечатка, собирает десятичные значения байтов по следующим полям в пакете (сообщении) Client Hello во время рукопожатия SSL:

  • Версия SSL.
  • Принимаемые шифры.
  • Список расширений.
  • Эллиптические кривые.
  • Форматы эллиптических кривых.

Затем она объединяет эти значения по порядку, используя запятую в качестве разделителя между полями и короткую черту для отделения значения каждого поля от его наименования. Далее эти строки хэшируются по алгоритму MD5, чтобы получить в результате 32-символьный цифровой отпечаток, который легко использовать и которым легко обмениваться. Так формируется цифровой SSL-отпечаток клиента в библиотеке JA3. Хэши MD5 также обладают преимуществом в скорости генерации и сравнения значений. Кроме того, их уникальность находится на очень высоком уровне.

Поведенческий анализ и обнаружение шаблонных действий

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

  • Какие страницы были посещены.
  • Порядок, в котором они были посещены.
  • Перекрестное сопоставление HTTP-заголовка Referer с ранее посещенной страницей.
  • Количество запросов, отправленных на сайт.
  • Частота запросов к сайту.

Эти признаки позволяют программным продуктам, предназначенным для борьбы с ботами, определять, является ли посетитель сайта ботом или человеком, основываясь на данных, которые они прочитали ранее. Также в некоторых случаях подобные инструменты отправляют пользователю задачу, которую он должен решить, например капчу. Если посетитель решит капчу, то система может принять его за настоящего пользователя, а если решение капчи завершится провалом, что типично для большинства ботов, которые не ожидают появления капчи, то такого «посетителя» система пометит как бота и запретит ему доступ к сайту.

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

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

Совет от профессионалов :) — лучший способ понять каждый аспект данных, которые перемещаются между клиентом и сервером в качестве части веб-запроса, — это использовать прокси-сервер, расположенный между ними, как, например, MITM, или же посмотреть на содержимое вкладки Network («Сеть») на панели браузера с инструментами разработчика, которая чаще всего доступна через F12. Для более глубокого анализа, который выходит за рамки протокола HTTP к более низкому уровню — стеку TCP/IP, вы можете воспользоваться Wireshark, чтобы проверить фактически передающиеся пакеты, заголовки и все эти данные, которые курсируют между браузером и сайтом. Любой фрагмент этих данных можно использовать для идентификации посетителя сайта и таким образом облегчить считывание его цифрового отпечатка.

Обнаружение на стороне клиента (браузера)

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

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

Для этого ему проще всего проверить, может ли клиент сайта (браузер) выполнить блок кода на языке JavaScript. Если клиент этого сделать не может, средство обнаружения с высокой вероятностью пометит такого клиента в качестве бота. Хотя можно запретить запуск JavaScript-кода в браузере, почти все сайты в Интернете окажутся в таком случае непригодными для использования, а значит в большинстве браузеров эта функция будет включена.

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

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

Например, объект браузера «navigator» показывает много информации о компьютере, на котором работает браузер. Вот как в раскрытом состоянии выглядит объект «navigator» браузера Safari:

Как боты парсят ваши сайты и обходят защиту? Рассказываем в деталях

Некоторые из распространенных характерных признаков, используемых для формирования цифрового отпечатка браузера:

  • User-Agent.
  • Заданный язык.
  • Статус «Do Not Track», то есть «не отслеживать».
  • Поддерживаемые возможности HTML5.
  • Поддерживаемые CSS-правила.
  • Поддерживаемые возможности JavaScript.
  • Установленные в браузере плагины.
  • Разрешение экрана и глубина цвета.
  • Временная зона.
  • Операционная система.
  • Количество ядер центрального процессора.
  • Производитель GPU и браузерный модуль отображения (rendering engine).
  • Максимальное количество одновременных касаний тачпада.
  • Различные типы хранения данных, поддерживаемые браузером.
  • Контрольная сумма холста HTML5.
  • Список установленных на компьютере шрифтов.

Помимо этих технических приемов инструменты обнаружения ботов также ищут любые признаки, которые могут сообщить им о том, что браузер пользователя управляется с помощью библиотеки автоматизации:

  • Присутствие признаков, специфических для ботов и демаскирующих их.
  • Поддержка нестандартных возможностей браузера.
  • Признаки использования популярных инструментов автоматизации, как например Selenium, Puppeteer или Playwright.
  • Также учитываются характерные для человека события, как например: произвольные движения мыши, клики, прокрутка веб-страницы, переключения вкладок.

Вся эта информация объединяется, чтобы сформировать уникальный цифровой отпечаток на стороне клиента, который позволяет определить, является ли посетитель сайта ботом или человеком.

3939
58 комментариев

Знавал я одних ребят, они не плохо вроде поднялись на "парсинге" (ну они правда еще там ранжирование какое-то придумали и в какую-то базу всё складывали) и результатами этого "парсинга" делились. Щас у них компания уже есть, вроде "Гугол" что ли называется, ну в общем давно они этим промышляют. 

21

Но зарабатывают они на другом, всё же.

Как-то делали одному клиенту сайт, собрали некую "ценную" базу. Клиент, конечно, не хотел чтобы база быстро и целиком утекла к конкурентам, попросил хоть какой-то защиты.

В итоге сделали некоторые триггеры на роботов и просто детектируя робота начинали отдавать ему мусорные данные (каждую характеристику из разной строчки БД). В итоге робот быстро нажирался левыми данными, которые от настоящих мог отличить только специалист, и уходил. 

В итоге наша "извращенная" база за пол года расползлась по куче сайтов-конкурентов.

10

да :) это хорошая стратегия. Я такое встречал не один раз. Но очень сложная в реализации и поддержке. 

2

Комментарий недоступен

8