Фейковые API-эндпоинты, которые выглядят как настоящие, но возвращают отравленные данные и логируют обращения. Человек не знает о них (в UI нет ссылок), скрапер находит через парсинг HTML или перебор.

Принцип

  1. Создать 3-5 фейковых эндпоинтов, которые выглядят как настоящий API
  2. Спрятать ссылки на них в HTML (невидимые для пользователя, видимые для парсера)
  3. Каждое обращение — логировать IP, User-Agent, заголовки
  4. Отвечать правдоподобными, но фейковыми данными
  5. При повторных обращениях с одного IP — автоматический бан

Типы маскировки

ЭндпоинтМаскировкаЧто отдавать
/api/v2/...”Новая версия API”JSON с фейковыми данными
/api/export/*.csv”Экспорт данных”CSV с мусором
/api/graphql”GraphQL endpoint”Фейковая schema introspection
/api/internal/dump”Случайно открытый дамп”Логирование + 403 с задержкой

Как скрапер находит honeypots

Скрытые ссылки в HTML, которые человек не видит, но парсер находит:

<!-- В HTML-комментарии -->
<!-- TODO: migrate to /api/v2/rides -->
 
<!-- Скрытый <a> -->
<a href="/api/v2/rides" style="position:absolute;left:-9999px"
   aria-hidden="true" tabindex="-1"></a>
 
<!-- В <head> -->
<link rel="alternate" href="/api/export/rides.csv" type="text/csv">

Скрапер при парсинге DOM находит эти URL и пытается обратиться — попадает в ловушку.

Логирование

Таблица scraper_traps:

CREATE TABLE scraper_traps (
    id BIGSERIAL PRIMARY KEY,
    ip INET NOT NULL,
    user_agent TEXT,
    headers JSONB,
    endpoint TEXT NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Индексы по IP и времени — для быстрого подсчёта обращений.

Автоматический бан

Cron раз в час: если IP обратился к honeypot > 3 раз за 24ч — добавить в deny-лист reverse proxy. Порог > 3 (не 1) защищает от случайных обращений.

Генерация фейковых данных

Фейковые данные должны быть правдоподобными, иначе скрапер быстро отфильтрует:

  • Реалистичные названия, даты, числа
  • Валидная JSON-структура, совпадающая с настоящим API
  • Характерные маркеры для отслеживания: несуществующие районы, невозможные комбинации полей

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

Honeypot работает в двух режимах:

  1. Обнаружение — логирование IP, алерт администратору
  2. Отравление — скрапер получает мусорные данные и использует их, не зная что они фейковые

Ограничения

  • Пользователь теоретически может случайно ввести URL honeypot в адресную строку — поэтому бан только при > 3 обращениях
  • Honeypot-эндпоинты не должны требовать подпись (HMAC) — иначе скрапер не попадёт в ловушку
  • Нужно регулярно проверять, что фейковые данные не попали в поисковые индексы

Связанные заметки