Страница 1 от 1

За защитата от ботове

Пуснато: 11 февруари 2010, 21:50
от Вилорп
Направи ми впечатление, че при регистрацията има една много хубава защита „Колко прави 6 минус 1 (словом)”, та понеже на моя форум имим проблем с непрекъснато регващи се ботове дали бихте ми редоставили кода за вашата защита или евентуално то къде сте го гледали за да го напишете.

*обнадеждено човече*

пп. Пускам нова тема защото не намерих подходяща в която да плесна въпроса си.

Пуснато: 12 февруари 2010, 13:03
от Борислав
Направил съм го много дървено и е само за версия 2 на phpbb. Първо най-лесното:

Файл templates/subSilver/profile_add_body.tpl:
Преди реда с Visual Confirmation съм добавил {CAPTCHA}.

После идва файла includes/usercp_register.php.

Някъде в началото му:

Код: Избиране на всичко

$captchas = array(
	'Колко прави 6 минус 2? (словом)' => 'четири',
);
$captchaQuestionField = 'question';
$captchaAnswerField = 'captcha';
$captchaQuestion = @$_POST[$captchaQuestionField];
$captchaAnswer = @$_POST[$captchaAnswerField];
После в края на блока else if ( $mode == 'register' ) (вътре в if-а):

Код: Избиране на всичко

		if ( ! isset($captchas[$captchaQuestion]) ) {
			$error = true;
			$error_msg .= ( ( empty($error_msg) ) ? '' : '<br />' ) . 'Клиента ви не е успял да предаде въпроса, защитаващ от спамботове! Свържете се с администратора и му съобщете за проблема.';
		}
		if ( ! preg_match("/^$captchaAnswer$/ui", $captchas[$captchaQuestion]) ) {
			$error = true;
			$error_msg .= ( ( empty($error_msg) ) ? '' : '<br />' ) . 'Хм… Опитайте да отговорите правилно на въпроса „' . $captchaQuestion . '“.';
		}
И накрая при $template->assign_vars (където е L_CURRENT_PASSWORD).
Преди този ред:

Код: Избиране на всичко

	$captchaQuestion = key($captchas);
Вътре в масива:

Код: Избиране на всичко

		'CAPTCHA' => "<tr><td class='row1'><input type='hidden' name='$captchaQuestionField' value='$captchaQuestion'><label for='$captchaAnswerField'>$captchaQuestion *</label></td><td class='row2'><input type='text' size='10' name='$captchaAnswerField' id='$captchaAnswerField'></td></tr>",
Както виждаш, има един-единствен въпрос, но ми върши прекрасна работа. При желание можеш да добавиш още в масива с въпроси и да си избираш случаен чрез array_rand().

Пуснато: 12 февруари 2010, 14:33
от Вилорп
Изключително много Благодаря! Знам че не се пие и яде, ама... =)

Пуснато: 13 февруари 2010, 17:58
от SecondShoe
Ето го същото нещо, но за phpbb3: Prime Anti-bot. Върши същата работа като горното, но могат да се избират няколко въпроса. Непробиваема за роботи защита, която е приятелски настроена към хората.