Антиспам или улучшение CAPTCHA в K2

Автор: Илья Остапенко /

Всем привет! Как вы уже поняли из названия темы, сегодняшняя статья будет об антиспаме или как улучшить защиту от спама. Если вы читали мой предыдущий пост, то уже знаете, что за последнее время мой блог частенько атакуют спамеры.

Антиспам или улучшение CAPTCHA в K2

Я даже придумал, как узнать ip адрес этих товарищей, об этом вы так же можете почитать в прошлой статье. Но через несколько дней я понял, что, спамеров много и я запарюсь постоянно удалять их сообщения и банить их ip. Тогда я начал действовать, и если вам интересно, что я придумал, то читайте пост далее.

Стандартная reCAPCHA не помогает, её с легкостью обходят с помощью специальных программ и сервисов распознавания капчи. Да и многих отталкивает капча, в которой, нужно вводить непонятные символы.  Да чего уж там таить, меня самого бесят эти кракозябры. Но защита нужна в любом случае. Я начал искать различные модули илиплагины для Joomla, которые будут совместимы с K2. Таких оказалось очень мало и все было не, то что я хотел, а переделывать что-то чужое хуже некуда, легче создать своё.

Именно этим я и занялся. Я хотел, чтобы защита была простая и ненадоедливая посетителям, чтобы не было никаких примеров, вопросов, кривых букв и т.д. И тут я вспомнил, что на нескольких сайтах, я видел очень интересную капчу, её суть заключалась просто в активации чекбокса. Это ведь просто один щелчок мыши и все!  Если вам по душе такая капча, тогда сейчас я расскажу вам как это реализовать в K2.

В самую первую очередь соединитесь со своей базой данных, и таблице #_k2_users и#_k2_comments создайте поле со следующими параметрами:

 

Поле:  commentantibot

Тип: INT

По умолчанию: Как определено (и ниже в окошке поставьте цифру - 1)

 

Остальные параметры добавлять не надо. Также в таблице #_users необходимо создать поле со следующими параметрами:

 

Поле: antibot

Тип: INT

По умолчанию: Как определено (и ниже в окошке поставьте цифру - 1)

 

Зачем нужны все эти поля и почему их надо создать сразу, объясню позже, а пока будем редактировать код.  Для начала отправляемся по пути/components/com_k2/templates/default и откроем для редактирования файлitem_comments_form.php.

В нем необходимо найти строчку <?php if($this->params->get('recaptcha') && $this->user->guest): ?> и перед ней добавить следующий код:

Первая строчка кода открывает условие, что если пользователь не авторизирован (иначе гость), тогда появиться все, что находиться в пределах условия, то есть до последней строчки.  Содержимое посередине совсем простое и абсолютно понятное.

Текст можете написать любой, он предназначен для пользователей, а вот код после, сейчас объясню. Ну, тег input понятен по своему названию, то есть необходимо что-то ввести. Тип у этого тега “checkbox”, то есть установить флажок.  Атрибутам name и id должны быть присвоены значения commentantibot, это необходимо для отправления введенных данных в базу данных. Ну и звездочка указывает, что поле обязательно для заполнения.

antispam2

Тут мы все сделали, теперь отправляемся редактировать модель, в которой происходят условия проверки пользователя, заполнения обязательных полей и т.д. Файл модели находиться в папках /components/com_k2/models называется он item.php. В нем нужно найти функцию comments (function comments ()). Нам нужен этот кусок кода:

Строк выделенных жирным у вас не будет, так как именно их вам надо будет добавить. Ну, начну объяснять, для чего нужны эти строки. Сначала объясню про добавляемые строки, а потом объясню как это все работает.

 

$row->commentantibot = $user->antibot;

Этой строкой мы указываем, что при отправлении комментария, в поле commentantibotтаблицы #_k2_comments, будут передаваться данные пользователя из поля antibotтаблицы #_users.

 

$commentantibot = trim($row->commentantibot);

Эта строчка добавляет поле для отправления и проверки на заполнение данных гостями.

 

empty($commentantibot) || $commentantibot == JText::_('Поставьте галочку, если вы не бот')

Если поле $commentantibot пустое, тогда будет выводиться сообщение с текстом «Поставьте галочку, если вы не бот»

 

Да! Чуть не забыл упомянуть одну ВАЖНУЮ фишку, если после того как вы сделаете все как написано в моей статье и зарегистрированные пользователь не сможет отправить комментарий, то просто подождите, некоторое время и все заработает. Честно скажу не знаю почему так, если вы знаете буду признателен если поделитесь.

Собственно говоря, вот и все, что вам нужно для создания такой же капчи как у меня. А теперь если вам интересно я объясню, как все это работает.

Для гостей:  Тут все просто, все заполненные поля проходят все проверки и если все хорошо отправляются в БД. Как тут работает капча? Все просто, изначально у checkbox'a нет никакого значения, следовательно, отправляя комментарий с пустым чекбоксом, мы отправляем пустое поле, которое не проходит проверку на заполнение. Как только мы активируем чекбокс (ставим галочку) оно принимает значение «0», тем самым переставая быть пустым и комментарий спокойно добавляется.

Для зарегистрированных: Вот с зарегистрированными пользователями я провозился очень долго, пока на форуме Joomla пользователь под ником Poznakomlus, не подсказал мне, что в фигурных скобках идут поля для зарегистрированных пользователей, тут-то до меня все и дошло. Дело в том, что при добавлении комментария от зарегистрированного пользователя, все поля кроме текста комментария, берутся из базы данных, а именно из таблицы #_users. Получается, даже если бы мы добавили чекбокс для зарегистрированных пользователей, он бы не отправлялся. Вот поэтому мы добавили поле antibot с изначальным значением  «1», в таблицу #_users. А так же добавили строчку для передачи значения этого поля в таблицу #_k2_comments, вместе с имеем пользователя и почтовым ящиком.

Фууух… Ну вот и все, надеюсь я все доступно разжевал и вы поняли, как работает капча. Я уже месяц использую её на своем блоге и за месяц, у меня ни одного спамерского комментария. Данная капча, на мой взгляд, очень эффективна и надеюсь, вам она понравиться. Если вам что-то не понятно, то задавайте свои вопросы в комментариях к этому посту, ну или пишите через обратную связь (а если вам интересно как сделать обратную связь на Joomla, тогда прочитайте статью здесь). Да и вообще напишите свое мнение о моей переделке.

Комментарии к записи


    Александр

      Илья Остапенко

    Vetal

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

Это не спам.