Как работает Incapsula и как его победить

Incapsula - это платформа доставки веб-приложений, которую можно использовать для предотвращения взлома.

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

Можно ли адаптировать этот репо или теперь Incapsula изменила режим работы?

Мне также любопытно, как я могу "скопировать как cURL" запрос из инструментов chrome dev на мою целевую страницу, и ответ chrome содержит пользовательский контент, но ответ curl - это страница "инцидент инкапсула". Это для хрома с печеньем изначально очищенным.....

curl 'https://www.radarcupon.es/tienda/fotoprix.com' 
-H 'pragma: no-cache' -H 'dnt: 1' -H 'accept-encoding: gzip, deflate, br' 
-H 'accept-language: en-GB,en-US;q=0.9,en;q=0.8' 
-H 'upgrade-insecure-requests: 1' 
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/62.0.3202.94 Chrome/62.0.3202.94 Safari/537.36' 
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' 
-H 'cache-control: no-cache' -H 'authority: www.radarcupon.es'
 --compressed

Я ожидал, что первый запрос от обоих выдаст что-то наподобие javascript-вызова, который установит cookie-файл, но, похоже, он сейчас не совсем так работает?

4 ответа

Incapsula, как и многие другие антискрейперные сервисы, использует 3 типа деталей для идентификации парсеров:

  1. Метаинформация IP-адреса
  2. Отпечатки Javascript
  3. Запросить анализ

Чтобы обойти эту защиту, нам нужно убедиться, что эти данные совпадают с данными обычного веб-пользователя.

IP-адреса

Обычный веб-пользователь обычно подключается с домашнего или мобильного IP-адреса, где на IP-адресах центров обработки данных развернуто множество рабочих парсеров (облако Google, AWS и т. д.). Эти 3 типа очень разные и могут быть определены путем анализа баз данных IP. Как следует из названия: датацентр — коммерческие IP-адреса, жилые — домашние адреса, а мобильные — мобильные сети на базе вышек сотовой связи (3G, 4G и т. д.)

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

Отпечатки Javascript

Используя JavaScript, эти сервисы могут анализировать среду браузера и создавать отпечатки пальцев. Если мы используем инструменты автоматизации браузера (такие как Selenium, Playwright или Puppeteer) в качестве парсеров, нам необходимо убедиться, что среда браузера похожа на пользовательскую.

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

Примечание: puppeteer-stealthявляется неполным, и вам нужно проделать дополнительную работу, чтобы надежно пройти Incapsula.

Ответ SO немного короток, чтобы осветить это, но я написал обширное введение по этому вопросу в своем блоге Как избежать блокировки веб-скрейпинга: Javascript

Запросить анализ

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

Скрытый парсер должен внести немного хаоса в шаблоны соединений парсинга.

Керл не собирается его резать

Поскольку вы спрашиваете об использовании CURL, поскольку Incapsula полагается на снятие отпечатков пальцев JS, вам не очень повезет в этом сценарии. Тем не менее, есть несколько вещей, на которые следует обратить внимание, которые могут помочь с другими системами:

  • Протокол HTTP2/3 будет иметь гораздо более высокий уровень успеха. Curl и многие другие http-клиенты по умолчанию используют http 1.1, а большая часть реального пользовательского трафика использует http2+ - это беспроигрышный вариант.
  • Значения и порядок заголовков также имеют значение, так как настоящие браузеры (Chrome, Firefox и т. д.) имеют определенный порядок и значения заголовков. Если ваше соединение скребка отличается - это беспроигрышный вариант.

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

Я столкнулся с той же проблемой при очистке сайта Incapsula, и по какой-то причине это действительно сработало:

      try:
        results = scrape_data(url)
except:
        results = scrape_data(url)

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

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

По сути, это то, что сработало для меня, и я понятия не имею, почему.

Причин может быть несколько. Трудно точно определить, какую комбинацию правил применяет Incapsula, чтобы обнаружить вас как бота. Это может быть использование ограничения скорости IP, снятие отпечатков пальцев браузера, проверка заголовка, снятие отпечатков пальцев TCP / IP, пользовательский агент и т. Д.

Но вы можете попробовать

  • Ротация IP.

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

  • Ротация USER_AGENT.

    Один из способов навигации по этому фильтру — переключить USER_AGENT на значение, скопированное из тех, которые используют популярные веб-браузеры. В некоторых редких случаях вам может понадобиться строка пользовательского агента из определенного веб-браузера. Существует несколько плагинов Scrapy, которые могут чередовать ваши запросы через популярные строки пользовательского агента веб-браузера, такие какscrapy-random-useragentилиScrapy- UserAgents.

  • Вы можете попробовать проверить инструменты разработчика и перепроектировать параметры запроса.

В основном в таких сценариях цель состоит в том, чтобы избежать бана путем сканирования с учетом лучших практик. вы можете прочитать о них здесь.или вы можете попробовать использовать для этого специальные инструменты, такие как Smart Proxy Manager или Smart Browser . Я работаю адвокатом разработчиков @Zyte.

Трудно дать конкретный ответ, потому что в Incapsula есть очень подробный механизм правил, который можно использовать для блокировки или оспаривания запросов. Обнаружение файлов cookie и поддержка Javascript - две наиболее распространенные точки данных, используемые для выявления подозрительного трафика; Строки пользовательского агента, заголовки и поведение, исходящие от IP-адреса клиента (запросы в минуту, запросы AJAX и т. д.), также могут вызывать вызов трафика Incapsula. Функция защиты от DDoS-атак агрессивно блокирует запросы, если она не настроена разумно с учетом объема трафика, который видит сайт.

Другие вопросы по тегам