Генерация CAPTCHA на perl при помощи Authen::Captcha
Я уже приводил алгоритм и готовый код для генерации проверочного изображения (СAPTCHA) для perl, реализуемой при помощи работы с библиотекой Image::Magick (предоставляет интерфейс между perl и самой imagemagick). Сейчас же хочу рассказать о работе с библиотекой Authen::Captcha, поскольку взаимодействие с ней проще, хотя теряется гибкость настроек генерируемого изображения. К слову, гибкость есть в библиотеке GD::SecurityImage, но у неё отстутствует простой механизм проверки результатов пользовательского ввода (этого недостатка должна быть лишена GD::SecurityImage::AC — "сплав" Authen::Captcha и GD::SecurityImage, которую я тоже обязательно попробую и расскажу о результатах).
Perl код для генерации изображения CAPTCHA
#!/usr/bin/perl use Authen::Captcha; use Digest::MD5 qw( md5_hex ); my $cap_data_folder = 'tmp/captcha'; # Здесь будет находиться текстовый файл с кодами CAPTCHA my $cap_out_folder = 'tmp/outputcaptcha'; # Тут расположены проверочные изображения CAPTCHA my $cap_length = 4; # Из скольки символов будет состоять капча my $captcha = Authen::Captcha->new( data_folder => $cap_data_folder, output_folder => $cap_out_folder, ); my $md5sum = $captcha->generate_code($cap_length);
Этот код создаст набор символов, сгенерирует на его основе изображение и вернёт md5 хэш для него. Наша следующая задача — проверить введённый пользователем код на соотвтетствие сгенерированномую.
Perl код для проверки введённого значения CAPTCHA
Для проверки введённого пользователем значения captcha нужно вычислить его md5 хэш (именно для этого используется библиотека Digest::MD5).
my $md5sum = md5_hex($cap_input_value); # Вычсляем md5 хэш для пользовательского ввода my $result = $captcha->check_code($cap_input_value,$md5sum); # Отдаём хэш на проверку
Результаты проверки приведены в документации на Authen::Captcha, я же продублирую их ниже:
1 : Passed
0 : Code not checked (file error)
-1 : Failed: code expired
-2 : Failed: invalid code (not in database)
-3 : Failed: invalid code (code does not match crypt)
Таким образом, достаточно просто сделать условия срабатывания, зависящие от результатов проверки. Легче лёгкого
октября 7, 2009 | Posted by dimio
Categories:
Tags:

Последние комментарии