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