Веб-скрапинг стал неотъемлемым инструментом для сбора данных из интернета, однако с развитием веб-безопасности решение защитных мер стало все сложнее. Одним из наиболее формидабельных препятствий является Imperva Incapsula, облачный сервис доставки приложений, включающий мощные средства защиты веб-приложений, защиту от DDoS-атак, CDN и балансировку нагрузки. В данном руководстве мы рассмотрим механизмы безопасности Imperva Incapsula и предложим практические решения для обхода этих мер в процессе веб-скрапинга в 2024 году.
Содержание
- Что такое Imperva Incapsula
- Как определить, защищен ли сайт Imperva
- Проблема обратной разработки
- Определение сетевого подключения
- Как решить проблемы с Imperva
- Как Capsolver решает проблему
- Заключение
1. Что такое Imperva Incapsula?
1.1 Введение
Imperva Incapsula — это облачный сервис доставки приложений, включающий защиту веб-приложений, защиту от DDoS-атак, CDN и балансировку нагрузки. Он обеспечивает защиту от DDoS-атак на уровнях 3/4 и 7, защиту DNS и ускорение веб-сайтов. Сервис обнаруживает действия ботов, определяет их источники и характер. Он разрешает полезные боты (например, краулеры Google), блокируя вредоносные или нежелательные (используемые в кибератаках).
1.2 Методы и процессы верификации
- Подпись проверки: Проверка параметров подписи.
- Репутация IP/ASN: Обнаружение прокси и отпечатков сетевых запросов.
- Поведенческие шаблоны: Мониторинг аномального трафика и частоты доступа.
- Обнаружение инструментов/ботов: Использует куки, JavaScript и сторонние CAPTCHA (например, reCAPTCHA и GeeTest) для обнаружения ботов.
Если вы сталкиваетесь с верификацией reCAPTCHA:
- Процесс определения ограничения доступа:
При доступе к защищенному Imperva веб-сайту проходят ряд процессов мониторинга и отслеживания. Если какой-либо этап кажется подозрительным, выполняется сочетание проверок. Конечная оценка определяет, предоставляется ли доступ.
2. Как определить, защищен ли сайт Imperva
2.1 Проверка запросов браузера
Обычно неудачная попытка доступа возвращает код состояния 4xx. После успешного доступа после верификации в куки включается параметр reese84
.
3. Проблема обратной разработки
Основные параметры включают __utmvc
и reese84
.
3.1 Параметр __utmvc
- Связанный JS-файл выполняет и перестраивает строку в зашифрованный код.
- Выполнение кода проверяет различную информацию оборудования устройства:
- Аппаратные значения устройства: Bluetooth, звук, экран и т. д.
- Информация об ОС и браузере: Размер окна, версия ядра, версия и тип ОС и т. д.
- Информация об отпечатке зашифровывается с использованием JavaScript.
3.2 Параметр reese84
- Генерация токена
reese84
включает большое количество динамических параметров. reese84
включает десятки отпечатков, и их число постоянно обновляется.- Каждый отпечаток имеет динамические и зашифрованные ключи, что затрудняет определение собираемой информации об отпечатке. Функции расчета отпечатков также анонимны и динамичны, причем в настоящее время используется около 20 таких функций, и их количество растет.
- Определение, соответствует ли собранная информация об отпечатке при доступе из различных сред (Chrome, Safari, и корреляция версии браузера)
- Собранная информация об отпечатке зашифровывается и вычисляется, и процесс вычисления зашифрован, что делает его нечитаемым.
4. Обнаружение сетевого подключения
- Информация в заголовке запроса: язык и IP-адрес, версия браузера и параметры токена соответствия и т. д.
- Обнаружение IP-прокси: Проверяет, приходит ли запрос от ISP. Использование резидентных прокси и мобильных сетей обычно разрешено.
- Протокол доступа: Большинство браузеров сейчас используют HTTP2. Использование HTTP 1.1 может быть рассмотрено как подозрительное. Для запросов, выполненных с помощью Python или Go, используйте библиотеки, поддерживающие HTTP2.
- Обнаружение TLS: Помимо версии HTTP, проверяется клиент-серверное подключение. Запросы, выполненные с помощью Python или Go, имеют заметные различия в TLS по сравнению с доступом через браузер. Измените настройки TLS или используйте библиотеки, поддерживающие TLS. Проекты с открытым исходным кодом предлагают такую поддержку.
Capsolver обрабатывает эти сетевые обнаружения при генерации используемых кук/токенов, делая поведение более похожим на человеческое, чтобы избежать обнаружения бот-детекторов.
5. Как решить проблемы с Imperva
- Крайне качественные IP-прокси могут предоставить прямой доступ.
- Инструменты автоматизации браузера, такие как Puppeteer.
- Node.js моделирует среды браузера для выполнения JS-файлов и расчета параметров. Node.js может иметь проблемы с памятью, что делает его непригодным для масштабного использования.
- Использование CapSolver.
Как Capsolver решает проблему
CapSolver обрабатывает сложные процессы расчета параметров, среды сети (IP-прокси/TLS-отпечаток) и подлинность отпечатков устройства, делая его эффективнее методов автоматизации браузера/Node.js и подходящим для масштабного использования.
Просто укажите CapSolver URL и соответствующий reeseScriptUrl
, и CapSolver вернет действующий токен для доступа к целевому веб-сайту.
Получение reeseScriptUrl
После неудачной попытки доступа обычно получается JS-файл с уникальным URL для каждого сайта. URL скрипта выглядит так:
- https://www.xxx.com/Ifainesse-What-mine-Alasterd-the-How-I-haile-Lad
- https://epsf.xxx.com/eps-d?d=www.xxx.com
- https://www.xxx.de/epsf/eps-d
Использование Capsolver
Imperva Incapsula вычисляет более 180 зашифрованных значений на основе собранных отпечатков. Capsolver решает эти проблемы, вам просто нужно вызвать API для получения решения и вы можете непосредственно решить проблему, пример кода Python представлен ниже:
import requests
import time
api_key = "ВАШ_API_КЛЮЧ"
website_url = "https://example.com/"
reese_script_url = "https://xxx.xxx.xxx.xxx/"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
proxy = 'http://127.0.0.1:7890'
def get_solution():
data = {
"clientKey": api_key,
"task": {
"type": 'AntiImpervaTaskProxyLess',
"websiteURL": website_url,
"userAgent": user_agent,
"reeseScriptUrl": reese_script_url,
"reese84": True,
}
}
uri = 'https://api.capsolver.com/createTask'
res = requests.post(uri, json=data)
print(res.text)
resp = res.json()
task_id = resp.get('taskId')
if not task_id:
print("failed to get taskId:", res.text)
return
while True:
time.sleep(1)
data = {
"clientKey": api_key,
"taskId": task_id
}
res = requests.post('https://api.capsolver.com/getTaskResult', json=data)
# print(res.text)
resp = res.json()
status = resp.get('status', '')
print('get status:', status)
if status == "ready":
print("successfully => ", res.text)
return resp.get('solution')
if status == "failed" or resp.get("errorId"):
print("failed! => ", res.text)
return
def request_site(solution):
headers = {
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
'Accept': 'application/json, text/plain, */*',
'sec-ch-ua-mobile': '?0',
'User-Agent': user_agent,
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en',
}
if solution.get('token'):
headers['cookie'] = solution.get('token')
headers['Accept-Language'] = solution.get('language')
res = requests.post(
website_url, headers=headers, proxies={"https": px}, timeout=(20, 20)
)
print(res.text)
print("response status code:", res.status_code)
if __name__ == '__main__':
solution = get_solution()
if solution:
request_site(solution)
Заключение
Навигация по мерам безопасности, введенным Imperva Incapsula, может быть довольно сложной, особенно с учетом его передовых техник обнаружения ботов и сложных механизмов отпечатков. Однако с правильными инструментами и пониманием можно эффективно преодолеть эти препятствия.
Используя решения, такие как CapSolver, которые упрощают процесс работы с сложными вычислениями параметров и управлением сетевыми средами, можно более эффективно решать защитные меры Imperva Incapsula. Способность CapSolver имитировать поведение, близкое к человеческому, через генерацию сложных токенов делает его особенно ценным для крупных операций по веб-скрапингу в 2024 году.
FAQ
Завершая эту статью, рассмотрим несколько часто задаваемых вопросов о веб-скрапинге страниц, защищенных Imperva:
Легально ли скрапить страницы, защищенные Imperva?
Да. Веб-скрапинг общедоступных данных юридически допустим по всему миру, при условии, что процесс скрапинга не наносит вред сайту.
Можно ли использовать кэш-сервисы для решения проблем с Imperva?
Да, общедоступные кэширующие сервисы, такие как Google Cache или Archive.org, иногда можно использовать для обхода защиты Imperva, поскольку эти сервисы часто включены в белый список. Однако не все страницы кэшируются, а те, что кэшируются, могут быть устаревшими, что делает их менее подходящими для веб-скрапинга. Кэшированные страницы также могут лишаться динамически загружаемого контента.
Возможно ли полностью решить проблему с Imperva и скрапить сайт напрямую?
Хотя технически возможно обойти защиту Imperva, это может быть незаконным в некоторых юрисдикциях и в общем случае не рекомендуется из-за сложности и потенциальных юридических проблем, связанных с этим.