Защита от спама без капчи (re-Captcha)

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

 

Приветствую!

Спам бесит. А ещё из-за него может перегружаться сервер, что способно привести к полному краху вашего сайта. По сему сегодня я расскажу, как сделать для своей формы на сайте защиту от спама без использования капчи.

Суть проста. В отправляемую форму нужно добавить невидимое для пользователя поле (display: none), которое обязательно к заполнению, и которое мы будем заполнять через JQuery при соблюдении условия, если ширина окна браузера пользователя больше, скажем, 10px. Естественно, не надо ставить большой размер, поскольку тогда с некоторых мобильных устройств форма также не отправится. Главная задача — определить, что у устройства пользователя есть эта самая ширина окна браузера. Таким образом, мы исключаем отправку формы ботом, ибо у бота не определится размер окна, и проверочное поле останется пустым => форма не отправится.

Поехали!

Итак, приступим. Допустим, у нас есть простая форма:

<form enctype="multipart/form-data" method="post" action="mail.php">
   <input type="text" name="your_name">
   <input type="text" name="email">		
   <textarea type="text" name="message">
   <input type="submit" value="Отправить">
</form>

Добавим в неё наше невидимое поле:

<form enctype="multipart/form-data" method="post" action="mail.php">
   <input type="text" name="check" required style="display: none">
   <input type="text" name="your_name">
   <input type="text" name="email">		
   <textarea type="text" name="message">
   <input type="submit" value="Отправить">
</form>

Далее напишем скрипт для определения, есть ли разрешение у экрана устройства. Обратите внимание — при обращении к элементу формы через атрибут name необходимо использовать знак доллара ($) перед знаком равно (=). Подробнее об этом можно прочитать в статье «Обращение к элементу формы через атрибут name в JQuery» ):

<script type="text/javascript">
  $(document).ready(function($) {	
    doc_w = $(document).width(); // определяем ширину окна браузера
    if (doc_w>10) { // если ширина окна больше 10px, заполняем поле check
	$('input[name$="check"]').val('Поехали!');
    };
  });
</script>

Если ширина окна браузера больше 10px, то полю с name=’check’ мы задаём значение value=’Поехали!’ (неважно что писать, лишь бы не оставлять его пустым). Соответственно в противном случае ничего не делаем, и значение остаётся пустым, и форма не пройдёт проверку на валидность. Главное не забыть прописать обработку этого поля в собственно обработчике формы. В моём случае он вынесен в файл mail.php:

<?php
   if(!empty($_POST['mail'])){
      $name = trim(strip_tags($_POST['your_name']));
      $email = trim(strip_tags($_POST['email']));
      $message = trim(strip_tags($_POST['message']));
      $check = trim(strip_tags($_POST['check']));
	  
      if ($check == 'Поехали!') { // если поле check имеет value="Поехали!" (т.е. не пустое), то отправляем
      mail('your_mail@mail.ru', 'Письмо с формы с защитой от спама', 'Имя: '.$name.'<br />Почта: '.$email.'<br /> Cообщение: '.$message, "Content-type:text/html;charset=utf-8");
      echo 'Ваше сообщение отправлено!';
      exit;
		}
   } 
   else { // если в поле check value не равно "Поехали!"
      echo 'Для отправки сообщения заполните все поля!';
      exit;
   }
?>

Вот собственно и всё. Таким нехитрым способом мы избавляемся от тонн спама на своей почте. Данный метод можно применять как к своим собственным формам, так и к плагинам форм (вроде Contact Form 7 и т.п.)

Всем удачи и пока!

Комментарии (2)

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

Ваш адрес email не будет опубликован.