Здравствуйте! Сделал форму поиска на сайте где аяксом (fetch) получаю данные с роута php (laravel), так вот все работает, но если быстро нажимать на кнопку отправляется много одинаковых запросов.
Как защититься от такогт спама? Нужно ли это делать и на клиенте и на сервере? Ибо ведь на клиенте скрипт можно изменить.
Подскажите пожалуйста как защититься
1. Если запрос с клиента не поменялся - выдаём результат из переменной JS (на клиенте).
2. Если отправляют в обход тот же запрос - выдаём кешированный результат на стороне сервера (не выполняя повторный поиск в БД)
3. Если запросы меняют и отправляют часто - ограничиваем время между соседними запросами и их параллельное количество на сервере: при начале поиска проверяем условие превышения частоты и, если всё нормально, в переменную сессии кол-ва активных запросов прибавляем 1-цу (инкремент), перед выдачей - вычитаем 1-цу (декремент). Если частота превышена - сразу возвращаем пустой результат без поиска. Превышена 3 раза - можно и забанить по IP на часик ;)
А что если просто Гугл капчу поставить на странице поиска? Или это будет не очень круто, типа поиск с капчей?
Или можно ко всему вами вышеописанному поставить ее