Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Опен Ресурс > Разработчикам

Ответ
 
Опции темы Опции просмотра
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #1 04-07-2012, 12:49

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

Как обычно есть два пути:
1. Просто запустить новую капчу (например ко мне в последнее время боты стали слишком уж часто ломиться)
2. Полностью интегрировать новую капчу с админкой роньки.

Сейчас я опишу вариант 1, а чуть позже выложу и вариант 2.

Итак, последовательность наших действий:
1. Идем на оффсайт и качаем архив c новой версией.
2. Старый обработчик капчи, расположенный по адресу /class/kcaptcha, либо убиваем (что менее рекомендовано на случай какой-либо нестыковки) либо переименовываем в /class/kcaptcha_old (чтобы на всякий пожарный иметь рабочую версию под рукой).
3. Распаковываем архив с новой версией в /class (внутри уже есть правильная директория с правильным именем).
4. В конце файла /class/kcaptcha/kcaptcha.php заменяем
PHP код:
}

?> 
на
PHP код:
}
if(isset(
$_REQUEST[session_name()])){
   
session_start();
}

$captcha = new KCAPTCHA();

if(
$_REQUEST[session_name()]){
   
$_SESSION['captcha_keystring'] = md5($captcha->getKeyString());
   
// if you change hash method don't remeber also change where you check session
   //  $_SESSION['captcha_keystring'] = sha1($captcha->getKeyString());
   //  $_SESSION['captcha_keystring'] = $captcha->getKeyString();
}
?> 
5. По дефолту новая капча настроена очень неплохо, но при необходимости можно отредактировать любые доступные настройки через файл /class/kcaptcha/kcaptcha_config.php - как минимум рекомендую изменить или отключить "подпись" к изображению, задав переменной $show_credits значение false. Остальное можно позаимствовать из настроек текущей капчи (хранящихся в файле /modules/system/cache/kcaptcha.php) - НО НИ В КОЕМ СЛУЧАЕ НЕ ПЕРЕПИСЫВАЙТЕ ФАЙЛ КОНФИГА ЦЕЛИКОМ!!! Иначе новая капча просто не заведется.


Вот и все! По желанию из директории /class/kcaptcha удаляем лишние файлы form_example.php и index.php - они нужны лишь для примера. Можно еще и папку шрифтов новой капчи пополнить шрифтами из старой. И так далее, по мере работы фантазии

P.S. Админка в части настройки капчи свой функционал не теряет - но изменения, естественно, в обработчик капчи не пойдут - для этого нужен вариант 2.
P.P.S. "Доработка" по варианту 1 работает как для RunCMS ветки 1.6, так и для 2.х. Вариант 2 скорее всего будет также соответствовать этому условию
P.P.P.S. Архив с новой капчей на всякий случай прикладываю к данному сообщению.
Вложения
Тип файла: zip kcaptcha.zip (46.2 Кбайт, 6 просмотров)
Оценка сообщения (репутация)
+8 LARK положительно: +


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
pan вне форума pan
): ǝҺɐни dиw ɐн иd⊥оwɔ

Аватар для pan

| Цитировать Старый #2 04-07-2012, 18:59

Цитата:
Сообщение от ZlydenGL Посмотреть сообщение
из-за чего ботам становится еще сложнее прочитать кодовое слово
Антикапча рулед всё Тем боле скоро лето
А так, как всегда мерси


Напильник для RUNCMS
Строим помаленьку
Для гурманов
Мебель для дома
Посетить домашнюю страницу pan
  Сообщения: 4,777 c 15.03.2004 | Репутация: 121
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #3 04-08-2012, 12:19

Антикапча-антикапчей, но после установки kcaptcha2 у меня весь поток спамеров как отрезало В стандартном комплекте ведь была даже не последняя kcaptcha версии 1.х - у нас 1.2.2, на оффсайте 1.2.6. Хотя во второй ветке уже и 1.2.6 прикрутить успели.

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


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #4 04-08-2012, 13:53

Обещанный ранее вариант 2.
0. Делаем в файле kcaptcha.php те же правки, что и для варианта 1 (создание переменной $_SESSION['captcha_keystring']) в конце файла).
1. Добавляем нужные строки в ленгпак: в файл modules/system/admin/captcha/language/russian/captcha.php после строки
PHP код:
define("_AM_FLUCTUATION""Вертикальная амплитуда искажения символа, деленная на 2"); 
дописываем
PHP код:
define("_AM_WHITE_NOISE""Количество белого шума (0 если не нужен)");
define("_AM_BLACK_NOISE""Количество черного шума (0 если не нужен)"); 
2. В собственно файл админки modules/system/admin/captcha/main.php после строки
PHP код:
         $content .= '$fluctuation_amplitude = '.(int)$_REQUEST['fluctuation'].";\n\n"
добавляем строки
PHP код:
         $content .= "#noise\n";
$content .= '$white_noise_density = '.(($_REQUEST['white_noise'] == 0) ? "0" "1/".$_REQUEST['white_noise']).";\n";
$content .= '$black_noise_density = '.(($_REQUEST['black_noise'] == 0) ? "0" "1/".$_REQUEST['black_noise']).";\n\n"
после строки
PHP код:
   $fluctuation = new XoopsFormText(_AM_FLUCTUATION"fluctuation"32$fluctuation_amplitude); 
добавляем строки
PHP код:
   $white_noise = new XoopsFormText(_AM_WHITE_NOISE"white_noise"32, ($white_noise_density == 0) ? 1/$white_noise_density);
$black_noise = new XoopsFormText(_AM_BLACK_NOISE"black_noise"32, ($black_noise_density == 0) ? 1/$black_noise_density); 
и после строки
PHP код:
   $form->addElement($fluctuation); 
добавляем строки
PHP код:
   $form->addElement($white_noise);
$form->addElement($black_noise); 
ОБЯЗАТЕЛЬНО проверяем, что админка капчи нормально заработала и начала сохранять все новые значения!
3. В самом файле геренации капчи указываем новый путь до конфигурационного файла: в файле class/kcaptcha/kcaptcha.php строку
PHP код:
        require(dirname(__FILE__).'/kcaptcha_config.php'); 
меняем на
PHP код:
        //require(dirname(__FILE__).'/kcaptcha_config.php');
require('../../modules/system/cache/kcaptcha.php'); 
Хотя в принципе первую строку можно и не комментировать, а просто удалить - но на всякий случай пусть будет.
Все, после этого kcaptcha2 полностью управляется из админки роньки Воистику, ронька проста просто до безобразия!

Последний раз редактировалось ZlydenGL, 07-01-2012 в 21:30
Причина: Добавил ссылку на правку kcaptcha.php - ранее забыл дописать, что нужна та же правка, что и для варианта 1.


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #5 04-08-2012, 14:03

И небольшой бонус: в файле modules/system/admin/captcha/main.php строку
PHP код:
         $content .= $captionlenght."\n\n# CAPTCHA image size (you do not need to change it, whis parameters is optimal)\n"
заменяем на
PHP код:
         $content .= $captionlenght."\n".'$captionmask = '.$caplen.";\n\n# CAPTCHA image size (you do not need to change it, whis parameters is optimal)\n"
а строку
PHP код:
   $caplen = new XoopsFormSelect(_AM_CAPLENGTH"caplen", (int)$length); 
заменяем на
PHP код:
   $caplen = new XoopsFormSelect(_AM_CAPLENGTH"caplen"$captionmask
После чего, еще раз проверив правильность настроек в админке капчи, нажимаем "Обновить". Все!
Что делает этот бонус. Как известно, админка рони позволяет выставить не только фиксированное значение длины капчи, но и случайно подобранное для какого-либо интервала (например от 5 до 7). Но при следующем открытии админки капчи в поле "Количество символов" будет уже не плавающее значение, а вполне себе фиксированное, случайно выбранное из того же предела! По мне - это дико неудобно, ибо если нужно "поиграть" к примеру с уровнем шума, перед последним обновлением надо обязательно перезадать плавающий интервал. Фиксится эта проблема элементарно, как раз вышеприведенным бонусом: в конфиг капчи добавляется еще один параметр, нигде больше не используемый, зато позволяющий запоминать точный диапазон длин для капчи.
На этом разрешите откланяться

P.S. Ах да, еще я себе добавил в список плавающих диапазонов длин капчи размерность от 6 до 8 (мне такая больше нравится): все в том же файле строку
PHP код:
   $caplen->addOptionArray(array(=> '4'=> '5'=> '6'=> '7'=> '8',
   
45 => '4-5'46 => '4-6'56 => '5-6'57 => '5-7')); 
заменил на
PHP код:
   $caplen->addOptionArray(array(=> '4'=> '5'=> '6'=> '7'=> '8',
   
45 => '4-5'46 => '4-6'56 => '5-6'57 => '5-7'68 => '6-8')); 
Если быть совсем точным, то не заменил, а дописал, но для внедряющих этот хак потребуется именно замена - для простоты


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #6 04-12-2012, 22:34

По результатам недели использования новой капчи могу констатировать: сие "новшество" позволило на корню избавиться от новой волны спамеров. До установки капчи2 в день появлялось по 3-5 "левых" регистраций, которые ощутимо гадили в комментариях к новостям/статьям/галерее (и даже "статьи" отправляли на премодерацию в огромном количестве), сразу после установки спамерье как отрезало. Так что антикапча-антикапчей, а обновиться ИМХО все-таки смысл есть


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
ZlydenGL вне форума ZlydenGL
Напильникъ - наше все

Аватар для ZlydenGL

| Цитировать Старый #7 04-21-2012, 12:16

И еще один небольшой бонусик.

Оригинальная капча получается довольно-таки контрастной - фон ощутимо светлее букв, что делает ее распознание в целом достаточно простым делом. Собственно после установки второй капчи на сайт продолжали пробиваться боты - количеством в разы (если не десятки - за полторы недели пробилось всего 2) меньше, но все равно обидно. Перекроем дорожку и им Нехай хумана для распознания ищут.

Для этого модифицируем файл modules/system/admin/captcha/main.php: строку
PHP код:
         $content .= '$foreground_color = array(mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));'."\n"
заменяем на
PHP код:
         $content .= '$foreground_color = array(mt_rand(130,180), mt_rand(130,180), mt_rand(130,180));'."\n"
Ну или комментируем старую, а после нее добавляем новую - как говорится по вкусу.

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

Можно конечно сделать наоборот - цвет фона максимально приблизить к цвету шрифта (изменяя формирование переменной background_colo), но ИМХО при этом и обычным людям проход капчи будет значительно затруднен. С описанным же выше подходом приходится конечно потратить время на распознавание (привет команде антикапчи - распознавание может реально стать нерентабельным или требовать больших сумм на обработку), но регистрация обычных пользователей оказывается особо не затрудненной


Не ошибается только тот, кто ничего не делает. Ковчег построил любитель. Профессионалы строили Титаник.
  Сообщения: 777 c 22.09.2008 | Репутация: 92
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 95.88 Kb. compressed to 89.98 Kb. by saving 5.91 Kb. (6.16%)
Page generated in 0.20255 seconds with 10 queries