[Перевод] Не защищайте сайт от скрапинга: сопротивление бесполезно

Habrahabr 1

За последнее десятилетие я реализовал много проектов, связанных с агрегацией и анализом контента. Часто агрегация включает в себя снятие данных со сторонних сайтов, то есть скрапинг. Хотя я стараюсь избегать этого термина. Он превратился в некий ярлык, с которым связано много заблуждений. Основное заблуждение в том, что веб-скрапинг можно заблокировать с помощью X, Y, Z.

tl; dr; Нельзя.

С точки зрения бизнеса

На прошлой неделе я встретился с высокопоставленным руководителем из отрасли, в которой развиваю свой бизнес GO2CINEMA. Без сомнения, это один из самых умных и знающих людей в киноиндустрии.

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

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

Да, тщательное исследование. Но всё-таки есть способы, чтобы тебя заблокировать. *ухмыляется*
Нет, парень, нет таких способов.

Реальные пользователи не отличаются от ботов

У людей, далёких от IT, присутствует эдакое идеализированное представление о программировании как в компьютерных играх 80-х — вы надеваете шлем виртуальной реальности и погружаетесь в Сеть. На самом деле вся информация и все взаимодействия — это нули и единицы. Здесь нет ничего человеческого. Нет различия между данными, введёнными компьютером или человеком.

Инспектирование веб-трафика

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

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

Технические контрмеры

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

Блокировка юзер-агента

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

Решение: поддельные заголовки HTTP для имитации реальных пользователей.

Пример: боты GO2CINEMA используют заголовки HTTP, которые имитируют реальные пользовательские сессии (например, в браузере Google Chrome). Заголовки HTTP рандомизируются между сеансами скрапинга.

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

Блокировка IP-адресов

Кинотеатр может попытаться определить и заблокировать IP-адреса ботов GO2CINEMA.

Решение: «поддельные» IP-адреса (использование прокси).

Массовая идентификация

Пример:

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

  1. Рандомизация IP-адресов.
  2. Выделение IP-адресов, которые географически как можно ближе к кинотеатру.
  3. Сохранение выделенного IP-адреса на время сеанса скрапинга.
  4. Пул прокси меняется каждые 24 часа.
Стоит отметить, что в текущей установке есть один недостаток: IP-адреса (прокси) зарегистрированы на различные дата-центры, а не на домашние адреса, как у реальных людей. Теоретически, кинотеатр может получить список подсетей всех дата-центров Великобритании — и заблокировать их. Это успешно заблокирует ботов в текущих настройках. Однако:
  1. Это потребует затрат. Например, такие услуги предоставляют MaxMind (база c IP-адресами анонимайзеров, прокси и VPN, цена не разглашается) и Blocked ($12 000 в год).
  2. Это может привести к блокировке реальных пользователей.
Netflix — пример провайдера, который блокирует IP-адреса известных VPN и прокси.

Если кинотеатры начнут блокировать IP-адреса дата-центров, придётся использовать IP домашних пользователей через прокси домашних адресов вроде Luminati. У такого подхода два недостатка:

  1. Стоимость (наш текущий трафик обойдётся в 1000 фунтов стерлингов в месяц).
  2. Надёжность. Работоспособность и скорость прокси домашних адресов сложно предсказать.
Некоторые кинотеатры уже пытались заблокировать IP-адреса нашего бота. Источник сообщил нам что кинотеатр X думает (или, по крайней мере, думал), что успешно заблокировал наши IP-адреса. Но это не так. Активность бота GO2CINEMA не прекращалась. Похоже, что кинотеатр X заблокировал кого-то другого, кто собирал такие же данные.

Важно подчеркнуть, что теоретически можно различить HTTP-запросы людей и ботов по шаблонам сёрфинга (см. раздел «Невидимая капча»). Но будет очень трудно определить HTTP-запросы именно от ботов GO2CINEMA (по причинам, указанным в разделе «Блокировка юзер-агента»).

Вывод: крайне трудно заблокировать ботов GO2CINEMA по чёрному списку IP-адресов, потому что 1) крайне трудно идентифицировать ботов и 2) у нас есть доступ большому количеству IP-адресов дата-центров и домашних пользователей.

Блокировка по IP не помешает нашим ботам продолжать скрапинг сайтов кинотеатров.

Использование капчи

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

Решение: API для решения капчи.

Полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей (CAPTCHA)

Капча только добавит неудобств обычным пользователям. Все методы капчи (в том числе для reCAPTCHA от Google ) легко обходятся с помощью сторонних сервисов вроде 2Captcha. В этих сервисах реальные люди решают задачи, поставленные перед нашим ботом. Стоимость услуг минимальна (например, 2 фунта за 1000 задач).

Вывод: добавление капчи не помешает нашим ботам продолжать скрапинг кинотеатров.

Невидимая капча

Кинотеатры могут использовать механизмы идентификации и блокировки ботов на основе поведения (так называемую «невидимую капчу»).

Невидимая капча использует комбинацию различных переменных для оценки вероятности того, что взаимодействия конкретного клиента автоматизированы. Нет единого рецепта, как это реализовать. Различные провайдеры используют разные параметры для профилирования пользователей. Эта услуга предоставляется некоторыми CDN (например, Cloudflare) и традиционными провайдерами капчи, как Google reCAPTCHA.

По словам бывшего руководителя отдела Google по распознаванию кликфрода Шумана Гоземаджумдера, эта возможность «создаёт новый тип проблем, которые очень продвинутые боты по-прежнему могут обойти, но порождает гораздо меньше сложностей для реального человека».

Вывод: идентификация по профилям поведения не помешает нашим ботам продолжать скрапинг кинотеатров, это просто ещё одна проблема, которую нужно обойти.

Проверка электронной почты

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

Решение: одноразовые «ящики».

Сейчас я просто добавляю в статью картинки, потому что мне нравится автор — Kidmograph

Пример:

Сейчас кинотеатры уже требуют наличия адреса электронной почты для покупки билета. GO2CINEMA использует доменное имя go2cinema.mail для подтверждения бронирования. Для каждой транзакции создаётся новый адрес электронной почты (например, john1@go2cinema.mail). Письма, отправленные на сгенерированные ящики, недоступны пользователям GO2CINEMA.

Текущий подход имеет преимущества:

  1. Ограничивает возможности кинотеатров отслеживать индивидуальную активность пользователей.
  2. Мешает кинотеатрам рассылать маркетинговые письма нашим пользователям.
Недостаток в том, что кинотеатры могут легко идентифицировать и блокировать транзакции сервиса.

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

  1. Купить оптом тысячи дешевых доменов.
  2. Использовать любую из существующих служб, предоставляющих временные адреса электронной почты (например, Mailinator).
  3. Создавать временные почтовые ящики у существующих крупных провайдеров (Yahoo, Gmail и т. д.).
  4. Выдать реальные адреса пользователей.
Вывод: проверка электронной почты не помешает нашим ботам продолжать скрапинг кинотеатров.

Мобильная проверка

Кинотеатр может потребовать от пользователя предоставить действительный номер мобильного телефона для завершения транзакции.

Решение: одноразовые мобильные номера.

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

В отличие от временных адресов электронной почты, виртуальный телефонный номер стоит относительно дорого (например, 1 фунт в месяц за номер).

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

  1. Стоимость SMS верификации.
  2. Потеря клиентов, у которых нет номера мобильного телефона или которые не желают им делиться.
  3. Сокращение диалога бронирования с точки зрения продукта (из практики это общее наблюдение, особенно в электронной коммерции).
Будет крайне экстремальным и беспрецедентным случаем, если кинотеатр пойдёт на такое.

Вывод: мобильная верификация не помешает нашим ботам продолжать скрапинг кинотеатров.

Блокирующий BIN

Кинотеатр может заблокировать наш банковский идентификационный номер (BIN).

Решение: подать в суд или выпустить карты в обычном банке (например, Barclays).

Пример:

GO2CINEMA использует для покупки билетов виртуальные дебетовые карты. Для каждого пользователя эмитируется виртуальная карта MasterCard через сервис Entropay. Entropay работает как банк, т. е. все его карты начинаются с BIN 522093. Теоретически, кинотеатр может заблокировать этот BIN.

Но блокировка BIN нарушит договор с платёжным шлюзом. Каждый такой договор включает правило по принятию любых карт. В случае с MasterCard эта политика указана в пункте правил 5.10.1:

5.10.1 Принятие всех Карт Торговая точка должна принимать все действующие Карты без каких-либо исключений или предпочтений, если они предъявляются к оплате в надлежащем порядке. Торговая точка должна создавать равные условия для всех клиентов, желающих произвести оплату с помощью Карты.
По той же технической причине кинотеатры не могут заблокировать MoviePass в США:
«Мы полностью соблюдаем правила MasterCard, и AMC подписала соглашения как с их процессинговой компанией, так и с MasterCard. Чтобы заблокировать нас, они по сути должны отказаться от приёма MasterCard». — источник
Обратите внимание, что пункт о принятии всех карт в Европе отличается от США. В Европе торговой точке разрешено полностью блокировать какой-нибудь тип карт, например, все предоплаченные карты.

Вывод: блокировка BIN не помешает нашим ботам продолжать скрапинг кинотеатров.

Изменение структуры сайта

Кинотеатр может без предупреждения изменить структуру сайта.

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

Если предположить, что наш скрапер зависит от структуры веб-сайта, то:

  • Изменения структуры сайта происходят редко.
  • Это не сильно отличается от изменений API.
  • Наши системы уведомят, как только это произойдёт.
  • Это повлияет также на реальных пользователей.
Вывод: изменение структуры сайта не помешает нашим ботам продолжать скрапинг кинотеатров.

Защита API с помощью ключа API

Другой бизнесмен (владелец кинотеатра) предположил, что кинотеатр может заблокировать GO2CINEMA, ограничив доступ к API с помощью ключа API.
Он: Кинотеатр может просто обновить свой API, чтобы требовать ключ API. Я: Какой API? Он: API для доступа к кинопоказам. Я: Эта информация опубликована на сайте? Он: Да. Я: Тогда клиент браузера должен иметь доступ к этому API для просмотра контента на сайте.
На этом конкретном сайте, который он привёл в качестве примера, ключ API был жёстко прописан в исходном коде.

Вывод: ограничение доступа к API с помощью ключа API не является эффективной стратегией для ограничения скрапинга, если это открытый API.

Резюме

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

Стоит подчеркнуть, что хотя ни один из этих методов не блокирует ботов, внедрение некоторых или всех этих механизмов дорого обойдётся кинотеатру с точки зрения 1) стоимости технической разработки и 2) неудобств для реальных пользователей.

Блокировка 98% скраперов

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

Стоит ли это ваших усилий? Ответ зависит от следующих факторов:

  • Какое влияние оказывают боты скраперов на ваш сайт/бизнес?
  • Повлияет ли это на реальных пользователей?
Чаще всего ответ заключается в том, что оно того не стоит.

Юридические препоны

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

Короткий ответ: нет (или крайне маловероятно, трудно и займёт много лет).

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

Заключительные замечания

Похоже, что многие читатели решили, что мы развязали технологическую войну с кинотеатрами (см. комментарии Reddit). Это не так.

За исключением слухов о попытке кинотеатра X заблокировать наши IP-адреса (упомянутые в разделе «Блокировка IP-адресов»), ни один кинотеатр не пытался нас заблокировать, используя какой-то из перечисленных методов. Цель этой статьи — поделиться кратким описанием сценариев «что, если», подготовленных как резервный план в рамках привлечения венчурного финансирования.

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

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