Добавление CAPTCHA в формы Joomla

Для начала добавим CAPTCHA в формы регистрации и восстановления пароля.
Нам понадобиться скрипт kcaptcha (сгодятся и аналоги) и препарируемые файлы Joomla 1.0.X в составе: /components/com_registration/registration.html.php и /components/com_registration/registration.php.

Последовательность действий по шагам:
1. Открывает файл /components/com_registration/registration.html.php и добавляем код.
Для формы восстановления пароля:

<input type="text" name="confirmEmail" class="inputbox" size="40" />
	</td>
</tr>
<!-- PATCH BEGIN -->
<tr>
	<td>
		Enter text shown below:
	</td>
	<td>
		<input type="text" name="captcha" class="inputbox" size="20" />
	</td>
</tr>
<tr>
	<td></td>
	<td><?php session_start(); ?>
		<img src="/kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id(); ?>" />
	</td>
</tr>
<!-- PATCH END -->
<tr>
	<td colspan="2">
		<input type="submit" class="button" value="<?php echo _BUTTON_SEND_PASS; ?>" />

Для формы регистрации:

} else if (r.exec(form.password.value)) {
	alert( "<?php printf( addslashes( html_entity_decode(_VALID_AZ09) ),
			  addslashes( html_entity_decode(_REGISTER_PASS) ), 6 );?>" );
// PATCH BEGIN
} else if (form.captcha.value == "") {
	alert( "<?php echo 'Попробуйте ввести код еще раз'; ?>" );
// PATCH END
} else {
	form.submit();

и тут:

<input class="inputbox" type="password" name="password2" size="40" value="" />
	</td>
</tr>
<!-- PATCH BEGIN -->
<tr>
	<td>
		Enter text shown below: *
	</td>
	<td>
		<input type="text" name="captcha" class="inputbox" size="20" />
	</td>
</tr>
<tr>
	<td></td>
	<td><?php session_start(); ?>
		<img src="/kcaptcha/index.php?<?php echo session_name()?>=<?php echo session_id(); ?>" />
	</td>
</tr>
<!-- PATCH END -->
<tr>
	  <td colspan="2">

2. Мы добавили вывод картинки с капчей и формы для ее отправки в формы, теперь необходимо обеспечить правильность введенного кода в файле /components/com_registration/registration.php.
Для формы восстановления пароля:

$_live_site = $mosConfig_live_site;
$_sitename 	= $mosConfig_sitename;
 
// PATCH BEGIN
session_start();
$captcha=$_POST['captcha'];
if(!isset($_SESSION['captcha_keystring']) ||
   $_SESSION['captcha_keystring']!==$captcha)
{
	unset($_SESSION['captcha_keystring']);
	mosErrorAlert('You need to enter the code shown.');
}
session_unset();
session_write_close();
// PATCH END
 
$checkusername	= stripslashes( mosGetParam( $_POST, 'checkusername', '' ) );
$confirmEmail	= stripslashes( mosGetParam( $_POST, 'confirmEmail', '') );

Для формы регистрации:

// simple spoof check security
josSpoofCheck();
 
// PATCH BEGIN
session_start();
$captcha=$_POST['captcha'];
if(!isset($_SESSION['captcha_keystring']) ||
   $_SESSION['captcha_keystring']!==$captcha)
{
	unset($_SESSION['captcha_keystring']);
	mosErrorAlert('You need to enter the code shown.');
}
session_unset();
session_write_close();
// PATCH END
 
$row = new mosUser( $database );

Комментариев: 5

  • 20.12.2009 Павел:

    Спасибо. Попробую на форме контакты

  • 09.04.2010 As:

    по сути тоже самое (почти), только уже всё правлено, достаточно просто скопировать www.eco-money.ru/forum/topic?id=19

    и капча будет работать как надо. удачи

  • 17.04.2010 Кирилл:

    As, спасибо, что напомнили о готовых патчах внедрения captcha, кстати ваш вариант видимо для Joomla 1.5.X.

  • 26.10.2011 igor:

    Здравствуйте а как в jdownloads внедрить капчу?

    • 26.10.2011 Кирилл:

      Честно не знаю, но подозреваю, что можно спросить у разработчика.


Добавление комментария:

 css.php