Доброго и удачного всем дня! Сегодня я хочу рассказать о том как установить капчу на сайт. Но сначала о том, что же это такое - капча.
Captcha от английского completely automated public Turing test to tell computers and humans apart — полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей. Капча используется для того, чтобы определить, кем является пользователь системы: человеком или компьютером. Основная идея заключается в том, чтобы предложить пользователю такую задачу, которую с лёгкостью может решить человек, но которую несоизмеримо сложнее решить компьютеру. В основном это задачи на распознавание символов.
Captcha чаще всего используется при необходимости предотвратить использование интернет-сервисов ботами, в частности, для предотвращения автоматических отправок сообщений, регистрации, скачивания файлов, массовых рассылок и т. п. В Рунете этот термин воспроизводится как капча.
Обычно captcha выглядит как тем или иным образом зашумленное случайное число, слово или иная надпись, которую пользователю нужно прочитать и ввести прочитанный результат.
Я хочу привести вам пример простого скрипта, который с небольшими изменениями можно установить практически на любой сайт.
Он состоит всего из трех небольших файлов:
index.php
handler.php
img.php
index.php
index.php - файл, в котором вначале запускается сессия, генерируется уникальный идентификатор сессии, и сохраняется в переменной.
Затем в нем случайным образом формируется строка из буквенно-цифровых символов, которая будет фигурировать на картинке капчи.
А еще в нем находится сама форма отправки, в которой выводится рисунок - капча, которая содержит сгенерированную последовательность символов - за это отвечает файл img.php.
Обработчиком формы, то есть программой которая принимает и обрабатывает отправленные данные, является файл handler.php.
<?
session_start();
// набор символов
$alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$secret = "";
// формируем строку из 5 символов, которая будет отображаться на картинке
for($i=0;$i<5;$i++)
$secret.= $alpha[rand(0,strlen($alpha)-1)];
// генерируем новый SESSIONID для того, чтобы при
// перезагрузке страницы старая сессия затиралась
session_id(md5(microtime()*rand()));
// сохраняем сгенерированную строку в переменной сессии
$_SESSION['secret'] = $secret;
?>
<form action="handler.php" method="post">
Имя : <input type="text" name="name">
Пароль : <input type="text" name="pass">
Число на картинке : <input type="text" name="secret">
<input type="submit" name="send" value="Отправить">
</form>
<img src="img.php?sid=<?=session_id();?>">
handler.php
handler.php - в начале запускается механизм сессии, затем проверяется соответствуют ли введенные данные сгенерированной последовательности сиволов и если это так, то выводятся значения имени и пароля введенные в форму отправки. В противном случае выводится сообщение о неверном в воде символов.
<?php
session_start();
if($_POST['secret'] == $_SESSION['secret'])
{
echo "Имя - $_POST[name] ";
echo "Пароль - $_POST[pass] ";
}
else
{
echo "Вы неверно ввели число на картинке!";
}
?>
img.php
img.php - в первую очередь стартуем сессию с полученным идентификатором сессии. Затем создаем картинку с указанными размерами. Задаем цвет фона, текста и линий, которые усложнят задачу распознавания. А указывая image/gif content-type с помощью header(), мы говорим скрипту отправить GIF-изображение прямо в браузер.
<?
// стартуем сессию с полученным SESSIONID
session_id($_GET['sid']);
session_start();
// создаем картинку:
$im = imagecreate(80,31);
// серый фон фон...
imageColorAllocate($im,246,246,246);
// ... с синим:
$textcolor = imageColorAllocate($im,0,0,255);
// ... текстом
$line = imageColorAllocate($im,255,0,0);
imagestring($im,20,20,10,$_SESSION['secret'],$textcolor);
// ... и красными линиями,
// которые усложнят задачу "распознавания" <p></p>
// картинки в автоматическом режиме
$line = imageColorAllocate($im,255,0,0);
imageline($im,20,0,80,31,$line);
imageline($im,0,10,50,0,$line);
imageline($im,90,5,40,31,$line);
imageline($im,0,31,70,0,$line);
// выводим изображение в браузер
imageGif($im);
header("Content-Type: image/gif");
?>
Ну а в итоге, при запуске этого скрипта, у вас должно получится следующее:
В интернете можно найти достаточно сервисов как для генерации капчи, так и для автоматического ее распознования. И нужно отчетливо понимать что 100% гарантии этот метод конечное же не дает. Но тем не менее это проверенный временем и практикой способ, который своей эффективностью доказал право на существование.