Защита формы от спама без капчи

Вот сделали вы самый простой одностраничник, добавили форму для обратной связи. Ждём заказы, заявки, а приходят сообщения следующего типа “Выиграй автомобиль, не крутя барабан!” У меня был период, когда с моего одностраничника на WordPress таких сообщений приходило штук 15 в день. И это утомляло. Тогда я просто добавил на сайт систему reCaptha Invisible от Google, но про установку системы защиты от спама от Google я напишу позже.

Сейчас я напишу, как защитить свою форму для одностраничника, который сделан на HTML с использованием обработчика на PHP. Сразу оговорюсь, что защититься от всего спама невозможно. Боты умнеют и даже самые сложные капчи не выдержат целенаправленной спам-атаки.

Самый простой способ – это установить стандартную Captcha, которая просит пользователя ввести какое-либо значение на картинке. Суть проста – обычный робот, как правило не может различить, что изображено, а человек может. Но в 2019-м году вводить очередную капчу на очередном сайте стало настолько невыносимо, что потенциальные клиенты закрывают ваш сайт только завидев заветные символы, которые вы предложите ему ввести.

Давайте с этим бороться, клиентов не терять, ботов отсеивать, а капчу делать невидимой.

Защита от формы с помощью ложного скрытого поля.

Суть проста:

  • Создаём дополнительное поле с именем name или email;
  • Настоящие поля вы называете любым другим именем;
  • Созданное поле скрываем с помощью стилей;
  • В обработчик формы добавляем php-код, который отсеивает бота;
  • Если наше ложное поле заполнено, то это бот и система его не пропускает;
  • Если ложное поле не заполнено, то значит это человек и можно работать.
<input type="text" name="name" value="" style="position: absolute; left: -9999px; display: none;">

Разбираемся:

  • name=”name” – имя ложного элемента. Бот будет думать, что это поле для ввода имени.
  • display: none – делает это поле невидимым.
  • left: -9999px – убирает поле за пределы экрана.
if(isset($_POST["NAME"]) && $_POST["NAME"] == "") {
	// Обработка формы
} else {
	// Ошибка! Подозрение на спам!
}

Этот код я использую достаточно давно. Не я его написал, но уже не помню автора, как кода, так и метода.

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *