Генерация 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)

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



Category Рубрики: Интернет, Кодинг | Tag Метки: , | Comments 10 комментариев »

10 комментариев

  1.   says:

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

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

    • dimio says:

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

  2.   says:

    Запускал кстати на никсе, родной системе для перла

  3. Илья says:

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

    • dimio says:

      Там, насколько я понимаю, распознают люди. А капча — от ботов.

      • Илья says:

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

        • Илья says:

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

        • dimio says:

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

          • Илья says:

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

            • dimio says:

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

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