Придумал не сам. Цитирую. Но у себя поставил - работает прекрасно называется == kcaptcha_rus ==Написал некто  pedrosoft Интеграция KCAPTCHA с Joomla 1.5. Часть 1: Компонент com_user
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 строки:
<input class="inputbox required validate-passverify" type="password" id="password2" name="password2" size="40" value="" /> *
        </td>
</tr>
<!-- BEGIN PATCH -->
<tr>
        <td height="60">
                <label for="captcha">
                        <?php echo JText::_( 'Enter text shown below' ); ?>:
                </label>
        </td>
        <td>
                <input type="text" name="captcha" class="inputbox" size="20" id="captcha" /> *
                <img src="<?php JURI::base()?>libraries/kcaptcha/index.php?<?php echo session_name(); ?>=<?php echo session_id(); ?>" alt="Captcha" style="vertical-align:-25px;" />
        </td>
</tr>
<!-- END PATCH -->
<tr>
        <td colspan="2" height="40">
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 — качество генерируемого изображения
Интеграция / Интеграция KCAPTCHA с Joomla 1.5. Часть 2: Компонент com_contact
Итак, продолжаю первую статью об интеграции KCAPTCHA с Joomla 1.5. Сегодня опишу интеграцию KCAPTCHA с компонентом com_contact.
Приступим:
1) В файле /components/com_contact/controller.php после строки 164 добавим:
$mail->setSubject( $FromName.': '.$subject );
$mail->setBody( $body );
// BEGIN PATCH
if(1!==$_POST['captcha']) {
        JError::raiseWarning( 403, JText::_( 'You need to enter the code shown' ));
        $this->setRedirect(JRoute::_('index.php?option=com_contact&view=contact&id='.$contactId, false));
        return false;
}
// END PATCH
$sent = $mail->Send();
2) В файл /components/com_contact/views/contact/tmpl/default_form.php после строки добавим:
<?php endif; ?>
<!-- BEGIN PATCH -->
<br />
<br />
<label for="captcha"><?php echo JText::_( 'Enter text shown below' ); ?>:</label>
<br />
<input type="text" name="captcha" class="inputbox" size="20" id="captcha" />
<img src="<?php JURI::base()?>libraries/kcaptcha/index.php?<?php echo session_name(); ?>=<?php echo session_id(); ?>" alt="Captcha" style="vertical-align:-25px;" />
<!-- END PATCH -->
<br />
<br />
<button class="button validate" type="submit"><?php echo JText::_('Send'); ?></button>
Готово! Если делаете интеграцию только для компонента com_contact, то не забудьте добавить нужный код в index.php Joomla, а также языковые константы в файл локализации, как это описано в первой части.
Как в com_contact сделать так, чтобы в случае ввода неверного кода с картинки, не пропадали уже введенные данные формы (e-mail, текст сообщения)?
Чтобы данные в форме сохранялись в default_form.php после
Код:
   $document =& JFactory::getDocument();
   $document->addScriptDeclaration($script);
вставляем
Код:
   $name      = JRequest::getVar( 'name',         '',         'post' );
   $email      = JRequest::getVar( 'email',      '',         'post' );
   $subject   = JRequest::getVar( 'subject',      $default,   'post' );
   $body      = JRequest::getVar( 'text',         '',         'post' );
Это переменные из обработчика - файла controller.php.
Дальше в input'ах в параметр value подставляем эти переменные, например так:
Код:
<input type="text" name="name" id="contact_name" size="30" class="inputbox" value="<?php echo $name ?>" />