Публикации

Пользователь:

Пароль:


Запомнить

Регистрация
Забыли пароль?



Пользователей: 3898
Новичок: BAnatol
Поддержи проект
Поддержите проект Webmoney
R197422573540
E197270426287
Z701768662172
Сказали «Спасибо»

Навигация

Устанавливаем более сложную каптчу на e107


Автор: Kapman
 9.2 - 13 голосов -

Как установить более сложную каптчу на e107 - хак

Если Вы ещё не знаете, каптчей (CAPTCHA) называется изображение, со случайно сгенерированным текстом предназначенное для защиты от автоматических регистраций, спама, подбора паролей и других действий осуществляемых с помощью программ-роботов.

В е107 используются довольно простые изображения, которые легко распознаются ботами. Мы установим более продвинутое решение – скрипт KCAPTCHA от captcha.ru.

Для сравнения:
Каптча сгенерированная Е107 -
Каптча сгенерированная скриптом KCAPTCHA -

И так, первым делом надо скачать архив со скриптом с kcaptcha.zip и распаковать его в папку e107_handlers. Далее в этой же папке находим и открываем в текстовом редакторе файл secure_img_handler.php (не забудьте сделать резервную копию файла).
Находим код:
  1. function verify_code($rec_num, $checkstr) {
  2.         global $sql, $tp;
  3.         if ($sql->db_Select("tmp", "tmp_info", "tmp_ip = '".$tp -> toDB($rec_num)."'")) {
  4.                 $row = $sql->db_Fetch();
  5.                 $sql->db_Delete("tmp", "tmp_ip = '".$tp -> toDB($rec_num)."'");
  6.                 list($code, $path) = explode(",", $row[0]);
  7.                 return ($checkstr == $code);
  8.         }
  9.         return FALSE;
  10. }

Изменяем на:
  1. function verify_code($rec_num, $checkstr) {
  2.         if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $checkstr){
  3.                 unset($_SESSION['captcha_keystring']);
  4.                 return TRUE;
  5.         }
  6.         unset($_SESSION['captcha_keystring']);
  7.         return FALSE;
  8. }

Эта функция отвечает за сравнение текста введённого пользователем с показанным на изображении.

Теперь находим и удаляем текст:
  1. $code = $this->create_code();

В следующей строке, изменяем:
  1. return "<img src='".e_BASE.$HANDLERS_DIRECTORY."secure_img_render.php?{$code}' alt='' />";

На
  1. return "<img src='".e_BASE.$HANDLERS_DIRECTORY."kcaptcha/?".session_name()."=".session_id()."' alt='' />";


Для 26-ой версии:
  1. return "<img src='".e_HTTP.$this->HANDLERS_DIRECTORY."kcaptcha/?".session_name()."=".session_id()."' alt='' />";


На этом можно сохранить файл и закончить, но, если Вы хотите сделать каптчу более удобной для пользователей, добавив кнопку обновления изображения, исправьте предыдущий код на:
  1. return "<img src='".e_BASE.$HANDLERS_DIRECTORY."kcaptcha/?".session_name()."=".session_id()."' alt='' id='captcha' />
  2. <br />
  3. <a href='#' onclick='getElementById(\"captcha\").src=\"".SITEURL.$HANDLERS_DIRECTORY."kcaptcha/?".session_name()."=".session_id()."&rand=\"+ Math.random(); return false;'>Обновить изображение</a>";

И измените кодировку файла на ту, которая используется Вашим сайтом.

Автор статьи: Евланов Александр [Kapman]