Установка reCAPTCHA на разные CMS. phpBB3

Помню я то время, когда боты были недостаточно интеллектуальными и не были способны обходить такую защиту как капчи (captcha), но все меняется... И вот на помощь админам и модераторам пришла reCAPTCHA.

reCAPTCHA

Это мощная система для защиты сайтов, форумов и блогов от спам-ботов и на данное время является самой надежной капчей. Да! Я согласен с тем, что изображение сложное для распознавания, даже человеку, но это того стоит!

reCAPTCHA

Рассматривать принцип действия reCAPTCHA я не собираюсь, но если Вам интересно, - Вы можете посмотреть статью на сайте wikipedia.org.

А теперь перейдем к самому интересному: рассмотрим установку той самой reCAPTCHA на разные CMS.

Установка reCAPTCHA на phpBB3

Рассмотрим пример на только что установленном форуме phpBB 3.0.5 со стилем prosilver. Ну, для начала нам нужно скачать сам мод, это можно сделать, пройдя по этой ссылке. Скачали? Тогда распакуйте архив в любую для Вас удобную папку. Вы увидите четыре файла, среди которых будет recaptchalib.php.

reCAPTCHA

Скопируйте или переместить его в каталог /includes/captcha, находящийся в корневом каталоге форума. Хочу заметить, что если Вы работаете с ОС Linux, то вам может пригодиться файл "README", в котором находится инструкция с автоматической установки патчей, и сами патчи: usercp_register.patch и profile_add_body.tpl.patch.

reCAPTCHA

Но для тех, кто работает с Windows, нужно будет помучаться...

И так! Нам нужно будет отредактировать код в файлах /includes/ucp/ucp_register.php и /styles/prosilver/template/ucp_register.html. Сделайте их резервные копии, мало-ли...

В файле ucp_register.html найдите строку:

<dd>{CONFIRM_IMG}</dd>

после которой будут эти три:

<dd><input type="text" name="confirm_code" id="confirm_code" size="8" maxlength="8" class="inputbox narrow" title="{L_CONFIRM_CODE}" /></dd>
<dd>{L_CONFIRM_CODE_EXPLAIN}<!-- IF S_CONFIRM_REFRESH --> {L_VC_REFRESH_EXPLAIN}<!-- ENDIF --></dd>
<!-- IF S_CONFIRM_REFRESH --><dd><input type="submit" value="{L_VC_REFRESH}" class="button2" /></dd> <!-- ENDIF -->

удалите или закомментируйте их.

Работу с файлом ucp_register.html мы закончили, теперь приступим к редактированию ucp_register.php:

Найдите на следующую сроку:

class ucp_register

и перед ней вставьте:

require_once($phpbb_root_path . 'includes/captcha/recaptchalib.' .$phpEx);

после мы отыщим строку:

global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;

и сразу после нее добавим несколько строк следующего содержания:

$publickey = '_publickey_';
$privatekey = '_privatekey_';

# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;

Обращаю внимание, что для работы мода Вам нужно иметь два ключа: "publickey" и "privatekey"! Где их взять? Взять их можете на сайте reCAPTCHA. После регистрации Вы получите ключи, их нужно будет скопировать, заменив "_publickey_" и "_privatekey_" на соответствующий ключ. Далее найдем строку:

$confirm_id = request_var('confirm_id', '');

удалим ее или же закомментируем, после этой строки добавим:

$confirm_id = (isset($_POST['recaptcha_response_field'])); 

Скучное занятие, неправда-ли? Потерпите, еще немножко осталось! Продолжим...

Найдем и закомментируем/удалим строку:

'confirm_code' => array('string', !$config['enable_confirm'], 5, 8), // вместо array('string', !$config['enable_confirm'], 5, 8) может быть array('string', !$config['enable_confirm'], CAPTCHA_MIN_CHARS, CAPTCHA_MAX_CHARS)

И так! Ищем эту часть кода:

$sql = 'SELECT code
	FROM ' . CONFIRM_TABLE . "
	WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
		AND session_id = '" . $db->sql_escape($user->session_id) . "'
		AND confirm_type = " . CONFIRM_REG;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if ($row)
{
	if (strcasecmp($row['code'], $data['confirm_code']) === 0)
	{
		$sql = 'DELETE FROM ' . CONFIRM_TABLE . "
			WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
				AND session_id = '" . $db->sql_escape($user->session_id) . "'
				AND confirm_type = " . CONFIRM_REG;
		$db->sql_query($sql);
	}
		else
		{
		$error[] = $user->lang['CONFIRM_CODE_WRONG'];
		$wrong_confirm = true;
	}

и заменяем либо комментируем, после вставляем этот код:

$resp = recaptcha_check_answer ($privatekey,

$_SERVER["REMOTE_ADDR"],

$_POST["recaptcha_challenge_field"],

$_POST["recaptcha_response_field"]);

if ($resp->is_valid == false) {
$error[] = $user->lang['CONFIRM_CODE_WRONG'];
$wrong_confirm = true;

далее мы закомментируем/удалим:

$code = gen_rand_string(mt_rand(5, 8)); //вместо mt_rand(5, 8) может быть mt_rand(CAPTCHA_MIN_CHARS, CAPTCHA_MAX_CHARS)
$confirm_id = md5(unique_id($user->ip));
$seed = hexdec(substr(unique_id(), 4, 10));

// compute $seed % 0x7fffffff
$seed -= 0x7fffffff * floor($seed / 0x7fffffff);

$sql = 'INSERT INTO ' . CONFIRM_TABLE . ' ' . $db->sql_build_array('INSERT', array(
	'confirm_id'	=> (string) $confirm_id,
	'session_id'	=> (string) $user->session_id,
	'confirm_type'	=> (int) CONFIRM_REG,
	'code'			=> (string) $code,
	'seed'			=> (int) $seed)
);
$db->sql_query($sql); 

Следующее действие - поиск строки:

$confirm_image = '<img src="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=confirm&id=' . $confirm_id . '&type=' . CONFIRM_REG . $str) . '" alt="" title="" />';

после чего мы ее закомментируем/удалим и за ней вставим:

$confirm_image = recaptcha_get_html($publickey, $error);

Сохраним!

После всех этих простых, но скучных манипуляций с кодом удаляем кеш (папка cache), предварительно сделав его резервную копию. Идем на страницу регистрации и наслаждаемся свежеиспеченной reCAPTCHA.

reCAPTCHA phpBB3

Источник: http://sait-com.com