Защита от спама для формы обратной связи

Мы можем решить эту задачу за вас!
Стоимость выполнения: 3000 рублей;
Время выполнения: 4 часа;
Спешим на помощь: контакты.

Владельцы сайтов не понаслышке знают, что такое спам с формы обратной связи. Письма с этим мусором постоянно приходят на почту. Автоматизированные скрипты спамеров, и днем и ночью «шерстят» по интернету, отправляя мошеннические, рекламные и вирусные письма.

Вряд ли адекватный человек поймает вирус или попадется на уловку таких рассылок. Но эти письма постоянно мешают и отвлекают. Сообщений со спамом приходит больше, чем писем от пользователей сайта. Из-за такой пропорции, легко потерять или пропустить письмо клиента. Пример списка писем чуть ниже. На скриншоте видно, что из двенадцати сообщений с сайта, только два уведомления отправлены людьми. Остальные — скриптами для рассылки спама.

Скрин спама с формы обратной связи

Как заблокировать спам на сайте

99% спам-писем отправляются в автоматическом режиме, то есть данные в форму обратной связи вводит и отправляет скрипт — программа, а не живой человек. Поэтому все способы блокировки спама сводятся к тому, чтобы отправить сообщения мог только человек. Различие способов заключаются только в том, на сколько отправка формы станет сложней для пользователей сайта. Важно не перестараться, не усложнить форму на столько, что клиенты перестанут ее заполнять.
Оптимальный способ защиты формы от спама – reCAPTCHA Google. Эта технология сама определяет уровень «реальности» человека, который заполняет форму. Все, что требуется от пользователя, это просто установить чекбокс «Я не робот». Но, если у reCAPTCHA возникнет подозрение, что данные вводит скрипт-спамер, то на сайте отобразиться окно для дополнительной проверки пользователя — будет предложено выбрать картинки, которые подходят под определенную тематику, например, кликнуть по всем автомобилям.

Форма обратной связи с reCAPTCHA

Установка reCAPTCHA на форму обратной связи

Для установки reCAPTCHA, в первую очередь необходимо зарегистрировать аккаунт в google и получить ключ для домена, на котором будет установлена рекапча. Создать и настроить reCAPTCHA можно тут: https://www.google.com/recaptcha/admin/create.
В настройках есть возможность выбора версии reCAPTCHA v2 и reCAPTCHA v3. Лучше выбрать третью версию, она более современная и надежная. Так же новая версия работает в «не видимом» режиме, что упрощает заполнение формы. В скрытом режиме reCAPTCHA не отображается у пользователя до тех пор, пока не посчитает его роботом, тогда появится чекбокс для проверки посетителя сайта.
По завершению регистрации, будут выданы два ключа: для сайта и секретный. Эти ключи нужно сохранить, они необходимы для установки reCAPTCHA на сайт.
Установка reCAPTCHA происходит на фронтенде – необходимо добавить js и дополнить html-форму. А так же необходимо добавить проверку на бекенде – сверить ключи.
Для добавления проверки в верстке нужно подключить js-файл, в пути которого должен быть вписан, полученный ключ сайта:



Так же необходимо доработать код отправки данных с формы. Ниже приведен простой пример с комментариями, который отправляет данные на сервер. В примере всего два поля – e-mail и текст комментария.

$(document).ready(function(){
	// при отправке формы
	$('#test_form').submit(function(event) {
		// остановка стандартной отправки данных
		event.preventDefault();
		// получение данных из полей формы
		var email = $('#email').val();
		var comment = $("#comment").val();
		// после загрузки рекапчи
		grecaptcha.ready(function() {
			// запрос к рекапче для формирования проверочного токена
			grecaptcha.execute('КЛЮЧ_САЙТА', {
				action: 'create_comment'
			}).then(function(token) {
				// добавляем в форму скрытое поле с полученым токеном
				$('#test_form').prepend('');
				// делаем отправку данных из формы
				$.post("form.php",{
					email: email, 
					comment: comment, 
					token: token
				}, function(result) {	
					console.log(result) 
					if(result.success) {
						alert('Комментарий успешно добавлен!')
					} else {
						alert('Попался спамер!')
					}
				});
			});
		});
	});
});

Остается только получить данные на сервере и проверить кто отправил форму – «живой человек» или робот. Пример проверки приведен ниже:

// получение данных с формы
$email = $_POST["email"];
$comment = $_POST["comment"];
// токен	
$token = $_POST["token"];

// секретный ключ
$secretKey = "СЕКРЕТНЫЙ_КЛЮЧ";

// отправка токена и ключа для проверки
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
	'secret' => $secretKey, 
	'response' => $token
);
$options = array(
	'http' => array(
	  'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
	  'method'  => 'POST',
	  'content' => http_build_query($data)
	)
);
$context  = stream_context_create($options);
$response = file_get_contents($url, false, $context);
// разбираем ответ рекапчи
$responseKeys = json_decode($response,true);

// заголовки для ответа в формате json
header('Content-type: application/json');
// проверка ответа recaptcha и ответ на фронт
if($responseKeys["success"]) {
	// если все хорошо
	echo json_encode(array('success' => 'true'));
} else {
	// что-то пошло не так, попался спамер
	echo json_encode(array('success' => 'false'));
}

Полный исходный код примера использования reCAPTCHA можно скачать на github.

Заключение

Вот так легко и быстро можно настроить защиту от спама для любой формы на сайте. ReCAPTCHA от Google сильно выручает владельцев и пользователей сайтов. Благодаря этой технологии, настройка спам-фильтра выполняется просто, а для пользователей существование reCAPTCHA нисколько не усложняет работу с сайтом.
Желаем поменьше спама и побольше настоящих заявок с ваших сайтов. Надеемся, теперь вы сможете защититься от нежелательных писем. А если у вас нет времени самостоятельно заниматься настройкой reCAPTCHA, то пишите нам – будем рады помочь.


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

Оставить комментарий

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