Содержание

Защита от ботов строится слоями: простые ловушки и проверки в формах отсекают большинство примитивных ботов, ограничение частоты запросов не даёт делать массовые действия, а невидимая проверка поведения и капча включаются только для подозрительных посетителей. Цель — сделать злоупотребление дорогим, не мешая настоящим людям.

Разберём, какой вред приносят боты, как защитить формы и регистрации, как бороться с накруткой SMS и парсингом и как не заблокировать своих пользователей.

Какой вред наносят боты?

Значительная часть трафика любого публичного сайта — автоматическая. Часть ботов полезна — поисковые роботы, мониторинг, — но остальные создают прямые расходы и риски.

  • спам в формах — менеджеры тратят время на мусорные заявки;
  • фейковые регистрации — засоряют базу и искажают аналитику;
  • накрутка SMS — боты запрашивают коды на платные номера, а вы оплачиваете рассылку;
  • подбор паролей — перебор утёкших пар «почта — пароль»;
  • парсинг — конкуренты выгружают цены и каталог, создавая нагрузку;
  • скупка — боты выкупают ограниченный товар или билеты раньше людей.

Как защитить формы без раздражающей капчи?

Формы обратной связи и заявки защищают сначала незаметными для человека проверками. Они отсекают большую часть примитивного спама, не добавляя людям ни одного действия.

Метод Как работает Что отсекает
Скрытое поле (honeypot) Поле невидимо для людей, боты его заполняют Простых ботов
Время заполнения Форма отправлена через 1 секунду после загрузки Скрипты без браузера
Токен формы Одноразовый токен, выданный при загрузке страницы Прямые запросы без загрузки страницы
Ограничение частоты Не больше N заявок с адреса и устройства Массовую отправку
Невидимая проверка Анализ поведения и браузера Более продвинутых ботов
Видимая капча Задача для человека Остатки — только для подозрительных
public function store(LeadRequest $request)
{
    $shownAt = $request->session()->get('form_shown_at');
    $tooFast = $shownAt === null || $shownAt->diffInSeconds(now()) < 3;

    // Скрытое поле заполнено или форма отправлена слишком быстро — молча принимаем и не сохраняем
    if ($request->filled('website') || $tooFast) {
        return response()->json(['ok' => true]);
    }

    Lead::create($request->validated());

    return response()->json(['ok' => true]);
}

Человек выбирает изображение на большом экране с сеткой картинок Фото: Unsplash

Как бороться с накруткой SMS и фейковыми регистрациями?

Накрутка SMS — когда боты массово запрашивают коды подтверждения на номера, с которых злоумышленники получают долю от оплаты. Счёт за такую атаку может составить сотни тысяч рублей за ночь, поэтому SMS защищают особенно тщательно.

  1. Ограничьте отправку: один код в минуту на номер, небольшой дневной лимит на номер, IP и устройство.
  2. Ограничьте страны и диапазоны номеров, если ваша аудитория в одной стране.
  3. Показывайте невидимую проверку перед отправкой кода.
  4. Настройте оповещение о резком росте отправок и дневной лимит расходов у SMS-провайдера.
  5. Используйте более дешёвые каналы, где возможно: код в мессенджере, на почту или passkeys — подробнее в статье двухфакторная аутентификация и passkeys.

Как ограничить парсинг?

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

  • ограничение частоты запросов к каталогу и API — подробнее в статье rate limiting;
  • сервис защиты от ботов на уровне CDN — статья CDN: как работает;
  • блокировка дата-центров и прокси, с которых не приходят реальные покупатели;
  • оптовые цены и остатки — только для авторизованных клиентов;
  • мониторинг аномалий: тысячи страниц каталога подряд без единого действия.

Как не заблокировать настоящих пользователей?

Любая защита даёт ложные срабатывания: за одним IP может быть офис или мобильный оператор, а у части людей отключён JavaScript или стоят блокировщики. Поэтому вместо жёсткой блокировки лучше усиливать проверку по шагам и следить за последствиями.

  • сначала невидимая проверка, видимая капча — только при подозрении, блокировка — в крайнем случае;
  • исключите поисковых роботов, проверяя их по обратному DNS;
  • следите за конверсией форм и регистраций после включения защиты;
  • дайте пользователю понятный способ связаться, если его заблокировали.

О других уязвимостях — статья OWASP Top 10 простыми словами.

Коротко

  • Боты спамят, регистрируют фейки, накручивают SMS, подбирают пароли и парсят данные.
  • Формы защищайте сначала незаметно: скрытое поле, время заполнения, токен, лимиты.
  • SMS защищайте строже всего: лимиты по номеру и устройству, страны, лимит расходов.
  • Парсинг не запретить, но можно сделать дорогим.
  • Усиливайте проверку постепенно и следите, чтобы не страдала конверсия.

Частые вопросы

  • Капча вредит конверсии?

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

  • Можно ли полностью защититься от парсинга?

    Нет: всё, что видит пользователь, можно скопировать. Цель — сделать массовый парсинг дорогим и медленным: лимиты, обнаружение ботов, отдача части данных только авторизованным пользователям.

  • Не заблокируем ли мы поисковых роботов?

    Не заблокируете, если исключить известных поисковых роботов, проверяя их по обратному DNS, а не по заголовку User-Agent, который легко подделать. Сервисы защиты от ботов обычно делают это сами.