Чат? — Отлично. Значит, у нас задача: отделить ботов от людей и забанить ботов.
Я действую так:
1. Собираю в оперативке на бэкенде статистику действий клиентов в разрезе IP.
2. После (!) обработки запроса клиента на бэкенде проверяю по статистике, не бот ли это? Использую несколько метрик и три временных среза для контроля лимитов: последние 3 секунды (здесь отлавливаются самые глупые боты), последние 10 секунд (здесь уже боты поумнее), последние 3 минуты (здесь ловятся совсем хитрые боты).
3. Если хотя-бы по одному из сочетаний метрика/период клиент выходит за границы дозволенного, объявляю его ботом.
4. Автоматизированно добавляю для данного IP-шника запрещающее правило на ближайшем брандмауэре. В итоге трафик на бэкенд больше не приходит.
5. Через месяц также автоматизированно удаляю IP-шник из черного списка брандмауэра.
В итоге обычный бот живёт у меня на сервере примерно полсекунды, успевая сделать 3...4 запроса. Потом IP уходит в бан на месяц и общается только с брандмауэром. Бэкенд сидит спокойно и ковыряет в носу.