Captcha

CAPTCHA – фильтр спам-ботов и реальных пользователей сайта, которые оставляют сообщения в формах различных модулей сайта, таких как «Обратная связь», «Комментарии», «Обратная связь», «Форум» и т.д. Капча может быть трех видов, классический «Код на картинке», более сложная вариация «reCAPTCHA», или «Вопрос-Ответ», когда администратор задает вопрос и варианты ответа, а пользователь должен выбрать правильный, чтобы его сообщение было принято на сайте.

Примечание: в DIAFAN.CMS используется «reCAPTCHA» 2-ой версии.

Подключение

Подключаемая часть – файл modules/captcha/captcha.inc.php. В нем описан класс Captcha_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_captcha. Экземпляр класса создается при первом вызове переменной.

Методы

string get ([string $modules = "modules"], [string $error = ""], [boolean $is_update = false]) – Выводит капчу.

  • string $modules: метка капчи
  • string $error: ошибка ввода кода, если запрос передан не через Ajax
  • boolean $is_update: капча генерируется для обновления

Пример:

// в модели modules/comments/comments.inc.php запрашиваем каптчу
$captcha = $this->diafan->_captcha->get("comments", '');

//выводим защитный код в шаблоне modules/comments/views/comments.view.form.php
echo $captcha;

string|boolean false error ([string $modules = "modules"]) – Проверяет правильность ввода капчи.

  • string $modules: метка капчи

Пример:

//выводим защитный код в шаблоне modules/comments/views/comments.view.form.php
echo $captcha;

//запрашиваем правильно ли введен защитный код при обработке запроса в файле modules/faq/faq.action.php
$error = $this->diafan->_captcha->error('faq');
if(
$error)
{
    
// защитный код введен неправильно
}

boolean configmodules (string $module, [integer $site_id = 0]) – Проверяет подключена ли капта в настройках модуля.

  • string $module: названием модуля
  • integer $site_id: страница сайта с подключенным модулем

Настройки

Настройки

В настройках модуля можно выбрать бэкенд для капчи и вписать настройки для бэкенда (используется reCAPTCHA v.2).

Бэкенды

К модулю можно подключить бэкенды для работы с различными сервисами. Добавлено в версии 6.0.9.10.

Для этого нужно разработать несколько файлов стандартной структуры и разместить папку с этими файлами в папку captcha/backend. После этого в настройках модуля появиться тип капчи.

Бэкенд должен иметь уникальное название латинскими буквами (по примеру recaptcha, qa и др.). Для примера будем использовать название myservice.

В папке captcha/backend/myservice могут находиться следующий файлы:

  • captcha.myservice.admin.php
  • captcha.myservice.admin.js
  • captcha.myservice.inc.php
  • captcha.myservice.view.php
  • captcha.myservice.js
  • captcha.myservice.php

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

Рассмотрим структуру стандартных файлов

captcha.myservice.admin.php

Файл содержит настройки бэкенда, подгружаемые при выборе поставщика услуг.

Структура файла:

Пример:

// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
    
$path = __FILE__;
    while(!
file_exists($path.'/includes/404.php'))
    {
        
$parent = dirname($path);
        if(
$parent == $path) exit;
        
$path = $parent;
    }
    include
$path.'/includes/404.php';
}

// наследуем класс Diafan, чтобы был доступен объект $this->diafan
class Captcha_myservice_admin extends Diafan
{
    public
$config = array(
        
"name" => 'Название бэкенда, выводимое администратору',
        
// настройки расширения
        // ключи этого массива - название настроек латинскими буквами
        
"params" => array(
            
// можно указать просто текстовое описание настройки
            // тогда она будет редактироваться как строка
            
'param1' => 'Название первой настройки',

            
// можно указать массив данных, тогда есть возможность
            // задать тип данных и подсказку
            
'param2' => array(
                
// название второй настройки
                
'name' => 'Ключ к API',

                
// доступны следующие типы:
                // text - строка, по умолчанию
                // checkbox - галочка
                // select - список
                // info - название выводиться текстом без редактирования
                // none - не отображается, но сохраняется
                
'type' => 'text',

                
// значение списка, если указан тип select
                
'select' => array(
                    
'ключ1' => 'значение1',
                    
'ключ2' => 'значение2',
                    
'ключ3' => 'значение3',
                ),

                
// подсказка
                
'help' => 'Ключ запросите у сервиса капчи.',
            ),

            
// можно определить свою функцию для вывода поля и его сохранения
            
'param3' => 'Название третьей настройки',
        )
    );

    
/**
     * Своя функция на редактирования настройки param3
     *
     * @param string $value значение для param3
     * @param array $values значение всех полей настроек, ключ - название поля
     * @return void
     */
    
public function edit_variable_param3($value, $values)
    {
        echo
'<div class="unit">
            <div class="infofield">Название поля</div>
            Значение поля
        </div>'
;
    }

    
/**
     * Своя функция на сохранение настройки param3
     * функция возвращает значение, которое нужно сохранить (не обязательно)
     *
     * @return mixed значение
     */
    
public function save_variable_param3()
    {
        
// сохраняет данные
        
return $value;
    }
}

captcha.myservice.admin.js

При наличии этот JS-файл автоматически подключается в интерфейс настроек.

captcha.myservice.admin.inc.php

Вывод капчи на сайте.

Пример:

// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
    
$path = __FILE__;
    while(!
file_exists($path.'/includes/404.php'))
    {
        
$parent = dirname($path);
        if(
$parent == $path) exit;
        
$path = $parent;
    }
    include
$path.'/includes/404.php';
}

// наследуем класс Diafan, чтобы был доступен объект $this->diafan
class Captcha_myservice_admin_inc extends Diafan
{
    
/**
     * Выводит капчу
     *
     * @param string $modules метка капчи
     * @param string $error ошибка ввода кода, если запрос передан не через Ajax
     * @param boolean $is_update капча генерируется для обновления
     * @return string
     */
    
public function get($modules, $error, $is_update)
    {
        
// функция выдает HTML-код капчи

        // настройки бэкенда доступны через настройки модуля:
        // $this->diafan->configmodules("названиеБэкенда_названиеНастройки", 'captcha');

        // при необходимости здесь можно подключить файл шаблона
        
ob_start();
        include(
Custom::path('modules/captcha/backend/myservice/captcha.myservice.view'.($is_update ? '.update' : '').'.php'));
        
$text = ob_get_contents();
        
ob_end_clean();
        return
$text;
    }

    
/**
     * Проверяет правильность ввода капчи
     *
     * @param string $modules метка капчи
     * @return string|boolean false
     */
    
public function check($modules)
    {
        if(!
$check_captcha)
        {
            return
'Вы робот!';
        }
        else
        {
            return
false;
        }
    }
}

captcha.myservice.js

При наличии этот JS-файл автоматически подключается на сайте.

captcha.myservice.php

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

Обратиться к файлу можно по адресу: http://site.ru/captcha/get/myservice/.

База данных

{captcha_qa} – Вопросы для капчи типа Вопрос-ответ

{captcha_qa_answers} – Варианты ответов для капчи типа Вопрос-ответ

Файлы

  1. modules/captcha/admin/captcha.admin.php – настройки модуля;

  2. modules/captcha/admin/captcha.admin.inc.php – подключение модуля к административной части других модулей;

  3. modules/captcha/backend/kcaptcha/captcha.kcaptcha.php – генерирование изображения капчи;

  4. modules/captcha/backend/kcaptcha/captcha.kcaptcha.admin.php – настройки капчи «Код на картинке»;

  5. modules/captcha/backend/kcaptcha/captcha.kcaptcha.inc.php – подключение для работы с капчей «Код на картинке»;

  6. modules/captcha/backend/kcaptcha/captcha.kcaptcha.js – JS-сценарий стандартной капчи;

  7. modules/captcha/backend/kcaptcha/captcha.kcaptcha.view.php – шаблон стандартной капчи;

  8. modules/captcha/backend/kcaptcha/captcha.kcaptcha.view.update.php – шаблон формы стандартной капчи;

  9. modules/captcha/backend/qa/captcha.qa.admin.php – настройки капчи «Вопрос-Ответ»;

  10. modules/captcha/backend/qa/captcha.qa.inc.php – подключение для работы с капчей «Код на картинке»;

  11. modules/captcha/backend/qa/captcha.qa.js – JS-сценарий капчи «Вопрос-Ответ»;

  12. modules/captcha/backend/qa/captcha.qa.view.php – шаблон капчи «Вопрос-Ответ»;

  13. modules/captcha/backend/qa/captcha.qa.view.update.php – шаблон формы для капчи «Вопрос-Ответ»;

  14. modules/captcha/backend/recaptcha/captcha.recaptcha.admin.php – настройки капчи «reCAPTCHA»;

  15. modules/captcha/backend/recaptcha/captcha.recaptcha.inc.php – подключение для работы с капчей «reCAPTCHA»;

  16. modules/captcha/backend/recaptcha/captcha.recaptcha.js – JS-сценарий для reCAPTCHA;

  17. modules/captcha/backend/recaptcha/captcha.recaptcha.view.php – шаблон reCAPTCHA;

  18. modules/captcha/backend/recaptcha3/captcha.recaptcha3.admin.php – настройки капчи «reCAPTCHA v3»;

  19. modules/captcha/backend/recaptcha3/captcha.recaptcha3.inc.php – подключение для работы с капчей «reCAPTCHA v3»;

  20. modules/captcha/backend/recaptcha3/captcha.recaptcha3.js – JS-сценарий для reCAPTCHA v3;

  21. modules/captcha/backend/recaptcha3/captcha.recaptcha3.view.php – шаблон reCAPTCHA v3;

  22. modules/captcha/captcha.get.php – прямое обращение к файлам бэкенда капчи;

  23. modules/captcha/captcha.inc.php – подключение для работы с капчей;

  24. modules/captcha/captcha.install.php – установка модуля.

Дополнения

Ваши комментарии и дополнения
23 июня 2013 г.
А что происходит и как работает captcha когда нажата кнопка обновить картинку с кодом?
24 июля 2017 г.
Не отображается ReCaptcha в popup окнах и табах! Может кто сталкивался с данной проблемой?
26 июля 2017 г.
Проблема была связана с асинхронной подгрузкой скриптов в файле custom/themes/functions/show_js.php

Убрал асинхронную загрузку и все заработало. http://prntscr.com/g0fxzv

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.