Фейковые API-эндпоинты, которые выглядят как настоящие, но возвращают отравленные данные и логируют обращения. Человек не знает о них (в UI нет ссылок), скрапер находит через парсинг HTML или перебор.
Принцип
- Создать 3-5 фейковых эндпоинтов, которые выглядят как настоящий API
- Спрятать ссылки на них в HTML (невидимые для пользователя, видимые для парсера)
- Каждое обращение — логировать IP, User-Agent, заголовки
- Отвечать правдоподобными, но фейковыми данными
- При повторных обращениях с одного 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 работает в двух режимах:
- Обнаружение — логирование IP, алерт администратору
- Отравление — скрапер получает мусорные данные и использует их, не зная что они фейковые
Ограничения
- Пользователь теоретически может случайно ввести URL honeypot в адресную строку — поэтому бан только при > 3 обращениях
- Honeypot-эндпоинты не должны требовать подпись (HMAC) — иначе скрапер не попадёт в ловушку
- Нужно регулярно проверять, что фейковые данные не попали в поисковые индексы
Связанные заметки
- Защита API от скрейпинга — общая стратегия
- AI poisoning — аналогичный подход для HTML (не API)
- Поведенческий анализ трафика — tarpit для пойманных ботов