В предыдущей статье я рассказывал как защищать устаревшую джумлу и админку от перебора паролей. Но при этом многие задаются вопросом: "Почему мне приходит спам с моего сайта через установленную на моем сайте форму обратной связи?".

Убрать спам с контактной формы сайта
Убрать спам с контактной формы сайта

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

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

Установка капчи на сайт как защита от спама

Чтобы предотвратить массовую отправку данных, следует своевременно позаботиться о защите подписных форм. Конечно, самым действенным вариантом будет установка капчи (captcha) - рисунка, текст или цифры с которого надо будет ввести в отдельное поле для подтверждения, что вы не робот. На данный момент существует огромный выбор разновидностей капчи:

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

- готовые решения от Google, Yandex и других сторонних сервисов. Это не только цифро-буквенные капчи, среди них есть много интересных вариантов, таких как собрать картинку-паззл, выбрать подходящие изображения и т.п.

Recaptcha как универсальная альтернатива всем капчам

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

Удобство нового метода смогли оценить многие пользователи, поэтому многими разработчиками API рекапчи интегрировано в программный код, необходимо только получить уникальные ключи на домен.

Recaptcha 2 в Joomla

В популярной CMS джумла рекапча реализована системным плагином, поэтому стоит выбрать её в настройках, активировать плагин и ввести полученные ключи. После этого как системные компоненты могут обращаться к гуглокапче (к примеру, регистрация пользователей или стандартная контактная форма), так и различные сторонние модули и расширения (Virtuemart, сторонние контактные формы, Jcomments и другие).

Немного по другому ситуация обстоит в более старых версиях (Joomla 1.5 и 2.5). Максимум там можно найти первую капчу от гугла, но она настолько отпугивает своей сложностью, что стоит подумать или о дописывании своего варианта или решиться на миграцию на последнюю версию.

Wordpress и рекапча от гугла

У вордпресса дела обстоят иначе: по умолчанию там в борьбе со спамом предлагается Akismet, который порой очень часто пропускает спам и работает не самым лучшим образом. Recaptcha существует отдельми плагинами, которые могут добавлять защитное поле в комментарии, форму авторизации или регистрации, а также в совместимости с контактной формой. 

Быстрый взляд на популярные варианты к сожалению не нашел подходящего решения, удовлетворяющего всем параметрам. У всех решений были свои косяки: обнуление полей комментариев при неверном вводе капчи, необходимость проходить проверку для входа в админку, поле рекапчи находилось ниже кнопки отправить - не всегда заметно с первого раза.

Поэтому на мой взгляд вп требует допила.

Невидимая Recaptcha

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

Для того, чтобы поставить новую невидимую рекапчу на сайт, необходимо получить отдельные ключи. Также необходимо реализовать функция обратного вызова (callback) для проверки легитимности. Более подробную информацию можно найти в API, и когда с ним разберусь, постараюсь выложить пример реализации на сайте.

Так как информации получилось много, то я вынес в отдельную статью - Используем невидимую рекапчу на сайте.

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

На самом деле нету ничего сложного в реализации recaptcha в любом модуле или самописной форме обратной связи. На сайте расписано подробное API как реализовать необходимую проверку. С размещением кода на фронтэнде обычно не возникает проблем, однако не все могут корректно отослать запрос проверки секретного ключа.

Поэтому я рассмотрю простой вариант back-end отправки json на php

<?php $recaptcha_secret = "XXXXXXXXXXXXXXXXXXXXXXX"; // Ваш секретный ключ
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']);
$response = json_decode($response, true);
if($response["success"] === true)
{
// Здесь должно происходить действие при корректном прохождении проверки
}
else
{
// Иначе выдаем какую-то ошибку
}
?>

Если понадобятся дополнительные действия с апи, то советую изучить документацию.

Защищаем форму обратной связи без капчи

Капча поможет решить нам проблему со спамом, однако многих она раздражает, и многие стараются обходиться без неё. Кроме этого, существуют различные сервисы как антигейт по обходу капчи (там люди за деньги заполняют данные с капчи). Поэтому не лишним будет рассмотреть альтернативные варианты. Для популярных CMS существуют готовые решения, в других случаях придется применить навыки программирования либо обратиться к специалистам.

Итак, я расскажу пару приемов, как повысить защищенность формы без капчи.

Скрытые поля как защита форм

Создаем hidden поля. Достаточно для заполняемых полей (name,phone, email)  в стилях прописать display:none; и дополнительно создать поля с нестандартными атрибутами name (к примеру phone-protect). Обязательно надо изменить код под новые поля и добавить ещё одну проверку: если наши скрытые поля будут заполнены ( или изменены дефолтные значения), тогда будет выдавать ошибку " Спам здесь не пройдет, обнаружен бот".

Этот метод дает большой выбор пофантазировать в вариантах проверок и названий полей, а значит своей нестандартностью защититься от большего количества ботов

Используем cookies для проверки уникальность посетителя

Проверяем cookies. Тут можно создавать разнообразные варианты. При этом с помощью куков можно реализовать проверку на однократное исполнение формы ( К примеру пользователь отправил заявку, и начинает снова и снова заполнять форму обратной связи - вдруг он просто конкурент. А ему в ответ " Вы уже отправили свою заявку").

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

Фильтрация входящих данных контактных форм обратной связи

Хорошая валидация полей на корректное заполнение является примером тоном правильного программирования. Это не только обезопасит Ваш сайт  от SQL инъекций и XSS-уязвимостей, но с учетом того, что боты заполняют случайными значениями, в большинстве случаев они могут не пройти элементарной проверки на корректный телефон. Как дополнительный вариант можно устроить какую-нибудь самописную подгрузку какой-нибудь проверки на Javascript - чем больше уникальность вашего решения, тем меньше шансов пройти спаму!

Не забудьте проверить, не изменилась ли работоспособность с вашими правками!!! С этими советами можно защитить сайт от спама в формах обратной связи. Ну а в следующей статье я расскажу, как бороться против примитивных DDos-атак и снизить нагрузку на сервер от ботов.

 

Комментарии   
0 # kosh 03.11.2020 16:30
8) Вообще ReCaptha не спасает от спама,
все это фуфло... Пока сам не возьмешься, будешь каждый день чистить папку "Спам" в почте... ;-)
Ответить | Ответить с цитатой | Цитировать
+1 # vasa 03.07.2018 16:09
Здравствуйте! Меня интересует вставка рекапчи в формах восстановления логина и пароля на Joomla 3. По умолчанию на Joomla 3 есть встроенная рекапча, но в связи с необходимостью использования K2, которое захватывает стандартную регистрацию - пришлось отключить рекапчу в joomla (чтобы встроенная рекапча от K2 нормально работала). При этом формы восстановления логина и пароля остались незащищенными.
Так вот, с установкой рекапчи на странице - действительно, все более-менее понятно - вставляется библиотека (скрипт рекапчи, и сама форма рекапчи с публичным ключом) в нужное место в форме.
А вот с проверкой на сервере - засада! Может вставить указанный в статье код в файл:
components/com_users/views/remind/view.html.php
Но куда именно?
указанный файл имеет следующий код:
Ответить | Ответить с цитатой | Цитировать
0 # Protect Your Site 03.07.2018 18:26
Добрый день!
А чем конфликтует рекапча с k2? Вообще сейчас использование к2 в принципе считается неактуальным (компонент не поддерживается, а в стандартной джумле уже есть весь функционал).
Вообще такое делать надо плагином, но мне кажется проще будет решить конфликт с K2
Ответить | Ответить с цитатой | Цитировать
0 # vasa 04.07.2018 02:22
Добрый!
K2 использую ИСКЛЮЧИТЕЛЬНО для личного кабинета с возможностью добавления аватара, чтобы этот аватар подхватывался в Ccomments.
Так вот, если включить в общих настройках Joomla рекапчу (в общих настройках сайта и в настройках пользователей), и одновременно включить рекапчу, встроенную в K2, то ПРИ ЛЮБОМ ответе на рекапчу (В ТОМ ЧИСЛЕ И ПРАВИЛЬНО) - постоянно отображается ошибка по ее прохождению (видимо проверка идет в двух направлениях - через joomla и через K2).
Если включить рекапчу в Joomla, но отключить ее в K2 - рекапча НЕ отображается.
Единственный вариант - отключить рекапчу в joomla и
оставить ее включенной в K2 - рекапча работает корректно. Но остается последняя проблема - K2 захватывает только регистрацию сайта, а не формы восстановления логина и пароля, которые остаются без рекапчи!
Таким образом, остается проблема ручного подключения рекапчи к этим формам, а именно проверки на стороне сервера.
Ответить | Ответить с цитатой | Цитировать
0 # Protect Your Site 04.07.2018 09:57
Надо смотреть, какие ошибки выдает:
1) Когда оба плагина работают, то скорее всего пытаются 2 рекапчи подгрузиться на одной странице ( что нельзя), необходимо для определенных страниц отключить стандартную капчу. А вообще ещё можно копать в сторону шаблона, может там где неправильно прописан вывод стандартной рекапчи. Вариантов на самом деле много
Ответить | Ответить с цитатой | Цитировать
0 # ыап ывап 12.02.2020 14:23
gffgsdfg sdfgsdfg sdfgsdfg sdfg sdfg sdfg sdfg sdfg
Ответить | Ответить с цитатой | Цитировать
+2 # Коля 17.01.2021 13:39
На своих сайтах я в принципе не могу избавиться от авторегистраций и спамных писем мне на почту. Вот только такой вариант помог: https://www.arscomp.ru/kak-zaschititsya-ot-spamerov-ddos-atak.html

Я использовал схему с серверным редиректом. Если что и проскакивает, то это уже не спам - ручками было размещено.
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий