Первое: reCaptcha
Если обход формы является серьезной проблемой, вы всегда можете включить reCaptcha, который должен быть включен в каждое сообщение этой конкретной формы.
Я не знаю осценарий, который вы решаете, но это сделает более или менее невозможным создание программных POST.
Второй: библиотека на стороне клиента
Другой способ, как предлагалось, на стороне клиента.Вы можете использовать клиентскую библиотеку и упростить для себя или написать собственный код, который будет выполнять что-то похожее.
Третье: динамическое именование полей
Как я понимаю, в вашей форме есть хотя бы одинполе на нем.И вам следует обрабатывать эту форму только тогда, когда она запрашивается в первую очередь.Что вы можете сделать, это сделать имя этого поля полностью динамическим:
- Серверная сторона создает форму и задает какое-то динамическое имя для вашего поля
- Сохраняет имя для последующего использования или шифрует егосервер и сохранить крипту в скрытом поле в виде
- Сервер возвращает данные
- Если имя поля совпадает с ранее созданным именем (либо на стороне сервера, либо в скрытом имени), выследует обработать его, иначе просто проигнорируйте запрос.
Четвертое: изменение структуры DOM
Если есть риск, что результаты будут использованы ботами, вы всегда можете изменить структуру вашего документа вразличные способы (изменить элементы контейнера, изменить их имена классов CSS, идентификаторы и т. д.).Составьте список изменений (несколько из них) и перестановок пользователей с этим.Вы можете более или менее всегда достигать результата, который визуально кажется человеку одинаковым, но машине будет трудно его прочитать.
Стандартные вещи
- Сделать процесс медленным для ботовно для людей это будет работать нормально (задержка в 5 с не должна быть заметна для людей)
- ограничение IP - вы можете разрешить только один запрос в x минут из одного и того же места - это сильно зависит от характера вашегоФорма
- Шаблон Honeypot , который обычно отфильтровывает ботов от людей.