CAPCTHA – защита от спамщиков

CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart) – полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей. Компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером.

Последнее время очень часто используются защитные CAPTCHA (каптчи) для регистрации или отправки сообщений. В этом уроке мы напишем свою собственную каптчу. Чтобы как-то усложнить нашу каптчу у нас будет использоваться случайный фон. Выбираем фон используя функцию rand из папки captcha, в ней должны быть фоны нашей каптчи (0.jpg, 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, 6.jpg, 7.jpg, 8.jpg):
$image = imagecreatefromjpeg("captcha/".rand(0,9).".jpg");
Теперь определим цвет текста для надписи на этой капчи:
$textcolor = imagecolorallocate($image, 0, 0, 0);
Текст каптчи мы будем брать из файла. Будет браться случайная строчка из файла basecaptcha.php.
$file = "basecaptcha.php";
Теперь выбираем слово из этой базы и производим замены:
$array = file($file);
$rand = $array[rand(0,count($array)-1)];
$rand = ereg_replace(" +", "", $rand);
$rand = ereg_replace(" ", "", $rand);

Записываем этот текст во временный файл, который нужен для последующего обращения к нему для сверки данных. Это нужно для того, чтобы можно было перезагрузить капчу не перезагружая страницу целиком. Если возникнут проблемы с созданием файла поставьте папке capctha необходимые для записи атрибуты, например через TotalCommander.
$fp = fopen("captcha/captcha.txt","w+");
fwrite($fp,$rand);
fclose($fp);

Теперь выбираем случайный шрифт для текста из файла, таким же способом как с фоном каптчи:
imagettftext($image, 20, 1, 1, 30, $textcolor, "captcha/".rand(0,9).".ttf", $rand);
и выводим всё на экран:
header('Content-type: image/jpeg');
imagejpeg($image);

Вот и все! CAPTCHA у нас вывелась на страницу, и чтобы проверить в следующем шаге правильно ли он веден, мы считываем значение из временного файла captcha.txt и сравниваем его с отправленным. Если они совпадают, то это не бот или очень умный робот =)
В конце нашего урока у Вас в папке должны быть файлы:

  • captch – папка
  • captch/0.fpg
  • captch/1.fpg
  • captch/2.fpg
  • captch/3.fpg
  • captch/4.fpg
  • captch/5.fpg
  • captch/6.fpg
  • captch/7.fpg
  • captch/8.fpg
  • captch/9.fpg
  • captch/0.ttf
  • captch/1.ttf
  • captch/2.ttf
  • captch/3.ttf
  • captch/4.ttf
  • captch/5.ttf
  • captch/6.ttf
  • captch/7.ttf
  • captch/8.ttf
  • captch/9.ttf
  • captch.php – сам файл с кодом
  • basecaptcha.php – список слов

Примечание: Для правильной работы этой капчи – установите ее во фрейме, а фрейм должен отображать файл с html ссылкой на самого – себя. Пример:

Теперь если пользователь кликнет по капчи, то она перезагрузится и отобразится новая, а на страницу действие не окажет.

]]>

Добавить в закладки

]]>

Теги: безопасность, , ,

3 комментариев по “CAPCTHA – защита от спамщиков”

  1. ]]> ]]> сказал:
    октября 17, 2009 в 04:26

    Предлагаю такой способ генерации случайной надписи на капче:
    for($x=0; $x $num.=rand(0,9);
    }
    $key=substr(md5($num),0,4); //$key – случайная строка

  2. ]]> ]]> сказал:
    декабря 11, 2009 в 13:19

    Интересный пост

  3. ]]> ]]> сказал:
    декабря 13, 2009 в 09:25

    Гутт пост