Генерация CAPTCHA на perl при помощи Authen::Captcha

генерация captcha на perl Я уже приводил алгоритм и готовый код для генерации проверочного изображения (С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)

Таким образом, достаточно просто сделать условия срабатывания, зависящие от результатов проверки. Легче лёгкого 🙂

10 мыслей о “Генерация CAPTCHA на perl при помощи Authen::Captcha”

  1. Can’t locate Authen/Captcha.pm in @INC (@INC contains….

    Установил модули но ошибка повторяется

    1. Что установили — это хорошо. Но раз ошибка повторяется — рискну предположить, что место установки не обозначено в @INC.
      Надо проверять, где находится модуль (особенно если устанавливали не родным для системы пакетным менеджером или не из-под рутового cpan) и добавлять путь к @INC.

  2. А какой смысл в этих капчах, если любой OCR-сервис типа [ссылка] может их обойти. Можете даже проверить свои капчи — там можно загрузить их для теста бесплатно

      1. Ну так ведь боты передают капчу на распознавание людям! И бот проходит защиту.

        1. Кстати, там можно потестировать вашу капчу на устойчивость. Хагружаете её туда и смотрите, как люди её распознают.

        2. Правильно. Я к тому, что делать капчу от человека бессмысленно, а раз люди распознают на этих сервисах — то глупо вообще обсуждать капчу в таком ключе. Люди и должны ее распознавать.
          Дальше встаёт вопрос экономической целесообразности, поскольку люди распознают не бесплатно. Т.о. капча на сайтах типа моего вполне оправдана — ботов она отсекает, а за распознавание человеком вряд ли кто-то станет платить.

          1. Знаете, я вполне могу заплатить 30 рублей за то, чтобы мне распознали 1000 капч. Это же 1000 сообщений или регистраций аккаунтов или мыл за смешную сумму.

            1. Что это доказывает или опровергает в свете вышесказанного? Если вы посчитаете приемлемыми ожидаемые дивиденды от таких вложений — почему нет?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *