KorniloFF-ScriptS ©

Здравствуйте, Гость!
 
Page
Menu

Простая капча

Отличный пример простейшей, но при этом вполне рабочей капчи (captcha - защитный код от спам-ботов) я увидел на сайте - sitear.ru

Немного подправив код, решил выложить там же в комментариях, но не смог по причине ограничений сайта. При попытке добавить сообщение получил Disallowed Key Characters. Так что выкладываю у себя, приведя ссылку на сайт автора.

Все настройки находятся в блоке кода Settings:

$ttf - путь к файлу шрифта капчи, $ts - размер шрифта.
Остальное лучше не трогать без понимания процесса.

Код тестировался на работоспособность в PHP-7.1

Код файла капчи


<?php
// Settings ////////////////////////////
$ttf= "/path to/fonts.ttf"; // path to ttf file
$ts= 25; // text size
$rgb=0xffffff; //background-color
////////////////////////////////////////

ini_set('session.cookie_httponly', 1);
session_start();
header("Content-type: image/gif");
$_SESSION['code'] = $code = random_int(100, 9999);
$color1 = random_int (10, 200);
$color2 = random_int (10, 200);
$color3 = random_int (10, 200);

$txt_box=imagettfbbox($ts, 0, $ttf, $code);
foreach ($txt_box as &$c) {
	$c= abs($c);
}
unset($c);

$box_width=($txt_box[0]+$txt_box[2]+$txt_box[4]+$txt_box[6])/2;
$box_height=($txt_box[1]+$txt_box[3]+$txt_box[5]+$txt_box[7])/2;
$img = imagecreatetruecolor($box_width+1,$box_height+1);
imagefill($img, 0, 0, $rgb);
imagettftext($img, $ts, 0, 1, $box_height-2, imageColorAllocate($img, $color1,$color2,$color3), $ttf, $code);
imagegif($img);
imagedestroy($img);
?>

Этот код нужно сохранить в файл captcha.php и можно разместить в любом каталоге. В дальнейшем коде путь к этому файлу я буду обозначать, как /path to/captcha.php. GET-параметр random_int(1,1e5) будем использовать для уничтожения возможности кеширования изображения капчи броузером клиента.

Также добавим возможность пользовательской перегрузки капчи по клику на ее изображении. Для этого будем использовать событие click этого изображения.

Далее нужно скачать и сохранить под названием fonts.ttf у себя на сервере файл шрифтов для капчи . Вы можете использовать как этот, так и любой другой, найденный в инете. В коде выше этот файл прописан в настройках по пути /path to/fonts.ttf

Пример использования капчи

Код для защищаемой формы


captcha 
Введите текст с картинки: 

Код проверки формы на сервере

И вот, после отправки формы на сервер, когда пользователь ввел защитный код, нужно проверить его соответствие коду, сгенерировавшему изображение капчи. Последний был записан в сессионом массиве с параметром code.


<?php
if(!isset($_SESSION)) session_start();
if($_GET['user_code'] == $_SESSION['code']) echo 'Проверка пройдена. Можно сохранять пост.';
else die ('Число с картинки введено не верно');
?>

Ну тут, думаю, все понятно без лишних объяснений. Если проверка пройдена, то можно выполнять дальнейшие программные действия. Если нет, обрываем работу программы с выводом предупреждающего сообщения.

В конечном результате вышеприведенные коды позволят вам защитить свои ресурсы от автоматических регистраций и бот-постинга, скажем, процентов на 90. Для большего процента защиты нужны будут уже более сложные реализации капчи. А пример данной реализации был использован с некоторыми доработками в форме добавления комментариев под этой статьей.

Еще раз спасибо автору исходного кода. Если мои объяснения или реализация скрипта вас в чем-то не устроила, вы всегда сможете посетить сайт автора по ссылке в начале этой статьи и воспользоваться его оригинальной реализацией.

Комментарии к теме (0)

Дабавить комментарий