Контроль AI-краулерів: пропустити корисних ботів, зупинити решту
Проблема, якої два роки тому не було
Ще недавно «боти на сайті» означали пошукові краулери й пару сканерів вразливостей.
Сьогодні до них додався новий клас — AI-краулери, які масово викачують контент для
навчання моделей і для генеративних відповідей. Вони не крадуть паролі й не ламають форми,
але вони роблять дві неприємні речі: споживають ваш трафік і ресурси origin у промислових
обсягах і забирають ваш контент, часто ігноруючи robots.txt.
Для невеликої команди це відчувається як раптове зростання навантаження без жодного зростання реальних відвідувачів. Рахунок за трафік росте, origin гальмує, а в аналітиці — тиша. Питання не в тому, «блокувати ботів чи ні». Питання тонше: як пропустити ботів, які вам потрібні, і зупинити тих, хто просто вас доїть.
Не всі боти — вороги
Найгірше, що можна зробити, — рубати весь автоматизований трафік суцільно. Пошукові краулери приносять вам органічний трафік. Монітори доступності перевіряють, чи живий сайт. Платіжні провайдери й соцмережі стукають до вас за прев’ю посилань. Заблокуєте наосліп — зникнете з видачі й зламаєте інтеграції.
Тому першим кроком іде не блокування, а класифікація. На edge кожен запит отримує контекст: хто це заявляє, що є, і чи підтверджується заявлене. Три рівні перевірки:
- Заявлена особистість. Рядок
User-Agent— це просто заявка, яку легко підробити. Він корисний як підказка, але ніколи — як доказ. - Підтвердження джерела. Справжні пошукові краулери приходять із відомих діапазонів мереж і проходять зворотну перевірку DNS. Скрапер, що прикидається пошуковиком з випадкового хмарного хостингу, викривається одразу.
- Криптографічний підпис. Найнадійніший рівень — коли бот сам доводить, хто він, через Web Bot Auth: підписані запити, які неможливо підробити без приватного ключа. Це верхня сходинка нашої драбини challenge, і саме вона дозволяє впевнено пропускати «хороших» ботів.
Що робити з рештою
Коли бот не проходить перевірку й поводиться агресивно — забирає десятки сторінок за секунду, ходить по каталогу послідовно, ігнорує затримки — реакція не мусить бути бінарною «бан». Різкий бан ловить і несправжні збіги теж. Замість цього працює градація:
- Уповільнити. Обмеження частоти на edge знижує апетит скрапера, не чіпаючи людей. Детальніше про механіку — в статті про rate limiting.
- Поставити перевірку. Автоматизований клієнт спотикається на proof-of-work чи CAPTCHA там, де людина проходить майже непомітно.
- Заблокувати з причиною. Якщо клієнт уже підтверджено шкідливий, він отримує відмову — і кожне таке рішення осідає в незмінному (append-only) аудит-логу, щоб ви могли пояснити, чому конкретний запит зупинено.
Чому це має жити на edge, а не в застосунку
Можна писати логіку розбору ботів усередині свого коду. Але тоді кожен зловмисний запит уже дійшов до вашого сервера, з’їв з’єднання й процесорний час — а ви лише постфактум вирішуєте, що з ним робити. Сенс edge у тому, щоб фільтрувати перед origin: агресивний скрапер зупиняється на нашому вузлі в ЄС, а до вас доходить лише чистий трафік.
Конфігурація змінюється без передеплою застосунку — правило класифікації оновлюється й розлітається на всі ноди за менш ніж секунду через watch за сховищем конфігурації. Ви міняєте політику для ботів, не торкаючись коду.
Чого ми не обіцяємо
Ми не стверджуємо, що ловимо «100% поганих ботів» — цього не вміє ніхто, хто чесний. Скрапери еволюціонують, орендують чисті IP і імітують браузери. Наша мета скромніша й чесніша: зробити масовий скрапінг дорожчим і повільнішим, впевнено пропускати перевірених ботів і давати вам повний журнал того, хто й що робив. Додаткова затримка від цієї класифікації тримається в межах проєктного бюджету — методику вимірювання ми розписали в окремій статті і підписуємо кожну цифру як staging-виміряну.
Хочете побачити, хто насправді ходить вашим сайтом, і відсіяти зайве? Напишіть нам.