Joomla настолько демократичная cms, что в базовый поставке не имеет никакой защиты от спам-ботов, хотя имеет формы ввода данных в которые эти спам-боты могут нагадить. Для избавления от такой напасти будем использовать отечественную разработку под названием KCAPTCHA, написанную на php «для защиты от спама и флуда». В первой части я расскажу об интеграции с компонентом com_user, а во-второй сделаю интеграцию с com_contact. Интеграция будет проделана с Joomla 1.5.14.
Скачаем KCAPTCHA и распакуем архив в директорию «libraries» дистрибутива Joomla.
Теперь приступим к интеграции:
1) В корневом файле Joomla index.php после 17 строки добавим:
// BEGIN PATCH
session_start();
if(isset($_SESSION['captcha_keystring'])&&($_SESSION['captcha_keystring']==$_POST['captcha']))
$_POST['captcha']=1;
else
$_POST['captcha']=0;
session_destroy();
// END PATCH
и после 92 строки:
$mainframe->triggerEvent('onAfterRender');
// BEGIN PATCH
JSession::close();
// END PATCH
/**
* RETURN THE RESPONSE
*/
2) Добавим проверку и показ защитного изображения в форму регистрации. В файле /components/com_user/controller.php после строки 331 добавим:
$document =& JFactory::getDocument();
// BEGIN PATCH
if ($_POST['captcha'] !== 1) {
JError::raiseWarning( 403, JText::_( 'You need to enter the code shown' ));
$this->setRedirect('index.php?option=com_user&task=register');
return false;
}
// END PATCH
// If user registration is not allowed, show 403 not authorized.
и в файле /components/com_user/views/register/tmpl/default.php после 73 строки:
3) Добавим переводы созданных нами языковых констант в файл локализации. Открываем /language/ru-RU/ru-RU.ini и добавляем в любое место следующие строки:
# BEGIN PATCH
ENTER TEXT SHOWN BELOW=Введите код
YOU NEED TO ENTER THE CODE SHOWN=Вы должны ввести правильный код, указанный на картинке.
# END PATCH
Ну вот теперь всё готово! Можно поднастроить KCAPTCHA, делается это через файл kcaptcha_config.php:
$allowed_symbols — доступные символы для картинок
$length — количество символов для проверки
$width $height — ширина и высота картинки
$show_credits — показ ссылки на авторов, чтобы убрать — поставить false
$jpeg_quality — качество генерируемого изображения
Только вот у меня похожие строки в файле /components/com_user/controller.php находятся не со строки 331, а со строки 231… туда и вставил, но пока что регистрация вырубилась совсем — каптча показывается, ввожу все данные, но система на нажатие кнопки «Зарегистрироваться» вообще не реагирует :( Может, у меня в темплейте что-то не так намудрено… к кому лучше обращаться за помощью? Других изменений, кроме описанных, не делал. До них регистрация работала.
Прошу прощения, порылся глубже, оказывается у меня не было стиля для invalid, и ошибка была вызвана не полем с капчей. Теперь всё работает прекрасно, спасибо большое ещё раз. Надеюсь, капча сможет остановить бандерлогов…
ОГРРРомное спасибо за материал! вот задумался о кнопке «обновить», бывают случаи, когда есть сомнения, то ли буква, то ли цифра. в общем, вещь полезная и известная. но вот с реализацией пока не выходит. с сайта разработчика взят следующий код:
но при нажатии на кнопку Обновить происходит полная перезагрузка страницы, далее сообщение о том, что введенный код не является правильным. видимо дело заключается в сессии, но я пока еще не большой спец. подскажите, в чем может быть дело. хотелось бы вот как у автора www.captcha.ru/captchas/multiwave/ в самом низу, те хочется обновления только картинки, а не всей страницы и уж тем более не сообщения об ошибке.
Весьма неплохо, но советую посмотреть на KeyCAPTCHA.com
буквально «убойный» и бесплатный продукт российской разработки
теперь с ботами и китайцами покончено навсегда! Я конечно не имел ввиду наших правнуков…
Небольшая поправка для Joomla 1.5.22 все тоже самое за одним но!
в файле components/com_user/controller.php код нужно указывать не после 331 строки а после 237.
Для добавления captcha в регистрацию.
Примерно так:
// Get required system objects
$user = clone(JFactory::getUser());
$pathway =& $mainframe->getPathway();
$config =& JFactory::getConfig();
$authorize =& JFactory::getACL();
$document =& JFactory::getDocument();
// BEGIN PATCH
if ($_POST['captcha'] !== 1) {
JError::raiseWarning( 403, JText::_( 'You need to enter the code shown' ));
$this->setRedirect('index.php?option=com_user&task=register');
return false;
}
// END PATCH
// If user registration is not allowed, show 403 not authorized.
$usersConfig = &JComponentHelper::getParams( 'com_users' );
if ($usersConfig->get('allowUserRegistration') == '0') {
JError::raiseError( 403, JText::_( 'Access Forbidden' ));
return;
}
Если сделать как указывает авто сего текста, то при регистрации в поле код можно ввести любой набор символов и captcha вас пропустит.
Joomla 1.5.22
Сделал все точно по вашей инструкции. 4 раза заново систему ставил, но все равно при вводе неправильного или пустого кода перенаправляет на index.php?option=com_user и пишет Зона зарегистрированных пользователей.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Комментарии:12