BotBan

Новости проекта

Две страховки от наплыва запросов: лимит с адреса и аварийная проверка

Лимит запросов в минуту с одного адреса и проверка браузера на случай, когда поток запросов перегружает сам сервис.

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

Лимит запросов с одного адреса. Движок BotBan оценивает посетителя, а не считает его запросы. Если программа по всем признакам выглядит браузером, она получает пропуск, модуль на сайте запоминает его на пять минут — и всё это время сервис её запросов не видит. Сколько бы их ни было. Это было слепое пятно: аккуратный парсер мог выкачивать сайт сотнями страниц в минуту.

Теперь модуль считает ответы из своего кэша и сообщает о них сервису, а владелец может задать лимит — от 120 до 6000 запросов в минуту с адреса, по умолчанию 600. Адрес, превысивший лимит, до конца минуты получает короткий ответ 429, сайт при этом не запускается.

Частота — плохая улика: за одним адресом бывает офис или целый оператор. Поэтому лимит не трогает общие адреса операторов и CDN, адреса, с которых за час пришло пять и больше разных браузеров, посетителей с признаками человека, поисковых роботов и белый список. Форму, корзину и операции в панели управления сайтом он не ограничивает вовсе — только запросы на чтение.

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

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

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

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

Подробности — в базе знаний: «Настройки защиты».