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

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