Как защищают форму на сайте от спама и ботов?
Павел, Тюмень 0
У нас на сайте форма обратной связи, и последние пару недель среди заявок регулярно попадается абракадабра вместо имени и ссылки на левые сайты в поле сообщения. Что обычно ставят против такого, чтобы не отпугнуть капчей живых людей?
Дмитрий Акиндинов технический администратор сайтов
ответил
Форму защищают сразу несколькими слоями. Первый — скрытое поле-ловушка (honeypot): невидимое человеку, но заполняемое ботом, которые слепо забивают все поля формы. Второй — ограничение частоты отправок с одного IP, обычно не чаще одной заявки в 30-60 секунд. Третий — проверка данных на сервере, а не только в браузере. Такой связки хватает, чтобы отсечь до 95% автоматического спама без единой капчи.
Ключевой момент с honeypot-полем — спрятать его правильно. Если закрыть через `display: none`, часть ботов это распознает и поле не тронет. Надёжнее сдвинуть поле за пределы экрана через CSS или пометить `aria-hidden`, а на сервере просто отбрасывать любую заявку, где это поле оказалось заполнено.
Серверная проверка нужна отдельно от JavaScript-валидации в браузере: её легко обойти, отправив запрос напрямую, минуя интерфейс. Обработчик на сервере должен заново проверять обязательные поля, экранировать ввод перед сохранением или отправкой на почту и работать только по HTTPS, иначе данные из формы уходят в открытом виде.
Если после этих трёх мер спам всё равно просачивается, добавляют капчу — математический вопрос («сколько будет 3+4») или чекбокс без завязки на внешние сервисы работают почти так же надёжно, как популярные готовые виджеты, и не требуют стороннего JavaScript на странице. Ставить капчу сразу, до простых мер, обычно не нужно: она снижает конверсию формы у части живых посетителей.
Отдельно стоит логировать входящие заявки с IP и временем отправки — это пригодится и для отладки спам-фильтра, и как часть подтверждения согласия на обработку персональных данных по 152-ФЗ, если на сайте есть чекбокс согласия.
Задать свой вопрос
Вопросы проходят модерацию. Ответ появляется на сайте в течение пары дней.
Вопрос отправлен. После проверки он появится на сайте вместе с ответом.
Вопрос не отправлен: нужно подтвердить согласие на обработку персональных данных.