Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> напечатать картинку 
V
    Опции темы
gcc
Дата 30.1.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



включаю ее так http://domain.ru/captcha.pl
PM WWW ICQ Skype GTalk Jabber   Вверх
shamber
Дата 30.1.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



стормозил

Это сообщение отредактировал(а) shamber - 30.1.2009, 15:07
PM MAIL Jabber   Вверх
gcc
Дата 30.1.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



я еще вспомнил это в книге "Рецепты для Программирования на perl" по-моиму 3 издание это было 

кстате, я вот не понял, зачем генерить случайно число и криптографировать его?

если бот будет перебирать цыфры которые на картинке и вводить все в подрят, то в чем смылс от еще одного случайно числа или от криптографирования его?

(если от перебора цифр и букв, то проще просто банить тех кто много раз вводит не правильно ...)

Это сообщение отредактировал(а) gcc - 30.1.2009, 18:38
PM WWW ICQ Skype GTalk Jabber   Вверх
Usmanec
Дата 26.2.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



Могу предложить рабочий пример.
Скрипт гостевой находиться на одном серваке каптча на другом и все работает!
Форма с каптчей (Можно теститить сколько влезет сайт давно умер...)
Каптча Каждый раз циферки каптчи разные (Всмысле прорисовываются по разному, делал, что они еще плясали то в лево наклонятся то в право и тд, но не понравилось). (Зайдите по ссылке и пообоновляйте страницу...)
user posted image 

Скрипт каптчи
Код

#!/usr/bin/perl

use GD 1.20;
#use constant
use constant font0 => "./fonts/britanic.ttf";
use constant font1 => "./fonts/engr.ttf";
use constant font2 => "./fonts/luconk.ttf";
use constant font3 => "./fonts/arlrdbd.ttf";
$zag=150;
$rsize=7;
# Пароль для шифрования каптчи (На разных платформах шифруеться по разному)
$captcha_pass = "Пароль для доступа к каптчи";
#######################################################
$im = new GD::Image(100,35);
warn $GD::VERSION;

sub digencode{
    my(@dig)=reverse(split(//,shift));
    my(%d);
    my($dig)=0;
    for($i=0;$i<=$#DIG;$i++){$d{$DIG[$i]}=$i}
    for($i=0;$i<=$#DIG;$i++){$dig+=$d{$dig[$i]}*$DIG_B**$i}
    return $dig;
    }

$rnd=int(rand(1000000000));
for(split(//,$captcha_pass)){$CAPTCHA_PASS+=unpack('C',$_)}
srand($CAPTCHA_PASS);
@ISS=split(//,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
while($#ISS>=0){if(int(rand(2))){push(@DIG,splice(@ISS,int(rand($#ISS+1)),1))
}else{unshift(@DIG,splice(@ISS,int(rand($#ISS+1)),1))
}}
$DIG_B=$#DIG+1;
$nf=digencode($ENV{QUERY_STRING});
srand($nf);
$flood_dig='0000'.int(rand(100000));
($flood_dig)=($flood_dig=~/(\d{5})$/);
srand($rnd);

(@rndc) =
    (
     $im->colorAllocate(234,237,240),
     #$im->colorAllocate(204,204,204),
     #$im->colorAllocate(153,153,153),
     #$im->colorAllocate(102,102,102),
     #$im->colorAllocate(51,51,51),
     $im->colorAllocate(0,0,0)
     );
@color=($rndc[0],$rndc[0],$rndc[0],$rndc[0],$rndc[0]);
$im->interlaced(1);                # cool venetian blinds effect
$rnd=int(rand(100000));
$rnd='0' x (5-length($rnd)).$rnd;
@rnd=split(//,$flood_dig);
# Рисуем линии
for(1..$zag){$im->line(int(rand(100)),int(rand(35)),int(rand(100)),int(rand(35)),$rndc[1])}
# Рисуем цифры
$trnd=int(rand(4));
$im->stringTTF($color[0],font0,(20+int(rand($rsize))),0,10,27,$rnd[0]) if $trnd==0;
$im->stringTTF($color[0],font1,(20+int(rand($rsize))),0,10,27,$rnd[0]) if $trnd==1;
$im->stringTTF($color[0],font2,(20+int(rand($rsize))),0,10,27,$rnd[0]) if $trnd==2;
$im->stringTTF($color[0],font3,(20+int(rand($rsize))),0,10,27,$rnd[0]) if $trnd==3;
$trnd=int(rand(4));
$im->stringTTF($color[1],font0,(20+int(rand($rsize))),0,25,27,$rnd[1]) if $trnd==0;
$im->stringTTF($color[1],font1,(20+int(rand($rsize))),0,25,27,$rnd[1]) if $trnd==1;
$im->stringTTF($color[1],font2,(20+int(rand($rsize))),0,25,27,$rnd[1]) if $trnd==2;
$im->stringTTF($color[1],font3,(20+int(rand($rsize))),0,25,27,$rnd[1]) if $trnd==3;
$trnd=int(rand(4));
$im->stringTTF($color[2],font0,(20+int(rand($rsize))),0,40,27,$rnd[2]) if $trnd==0;
$im->stringTTF($color[2],font1,(20+int(rand($rsize))),0,40,27,$rnd[2]) if $trnd==1;
$im->stringTTF($color[2],font2,(20+int(rand($rsize))),0,40,27,$rnd[2]) if $trnd==2;
$im->stringTTF($color[2],font3,(20+int(rand($rsize))),0,40,27,$rnd[2]) if $trnd==3;
$trnd=int(rand(4));
$im->stringTTF($color[3],font0,(20+int(rand($rsize))),0,55,27,$rnd[3]) if $trnd==0;
$im->stringTTF($color[3],font1,(20+int(rand($rsize))),0,55,27,$rnd[3]) if $trnd==1;
$im->stringTTF($color[3],font2,(20+int(rand($rsize))),0,55,27,$rnd[3]) if $trnd==2;
$im->stringTTF($color[3],font3,(20+int(rand($rsize))),0,55,27,$rnd[3]) if $trnd==3;
$trnd=int(rand(4));
$im->stringTTF($color[4],font0,(20+int(rand($rsize))),0,70,27,$rnd[4]) if $trnd==0;
$im->stringTTF($color[4],font1,(20+int(rand($rsize))),0,70,27,$rnd[4]) if $trnd==1;
$im->stringTTF($color[4],font2,(20+int(rand($rsize))),0,70,27,$rnd[4]) if $trnd==2;
$im->stringTTF($color[4],font3,(20+int(rand($rsize))),0,70,27,$rnd[4]) if $trnd==3;

# Выводим заголовки с отключением кеширования
print "Content-type: image/png\n" ;
print "Pragma: no-cache\n";
print "Expires: now\n\n";
# Переводим STDOUT в двоичный режим
binmode(STDOUT);
# Выводим картинку через STDOUT
print $im->png;


Обрезанный скрипт формы
Код

#!/usr/bin/perl
# Пароль для шифрования каптчи (На разных платформах шифруеться по разному)
$captcha_pass = "Пароль для доступа к каптчи";
$captcha_url='http://localhost/captha.cgi';

$rnd=int(rand(1000000000));
for(split(//,$captcha_pass)){$CAPTCHA_PASS+=unpack('C',$_)}
srand($CAPTCHA_PASS);
@ISS=split(//,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
while($#ISS>=0){if(int(rand(2))){push(@DIG,splice(@ISS,int(rand($#ISS+1)),1))
}else{unshift(@DIG,splice(@ISS,int(rand($#ISS+1)),1))
}}
$DIG_B=$#DIG+1;
srand($rnd);

sub digdecode{
    my($dig)=shift;
    my($ndig,$nd)=('',0);
    for($i=1;$dig>0;$i++){
         $nd=$dig-(int($dig/$DIG_B**$i)*($DIG_B**$i));
         $dig-=$nd;
         $ndig=$DIG[($nd/$DIG_B**($i-1))].$ndig;
         }
    return $ndig;
    }

# Начиная с 4294967295 функция srand() под ОС Win* начинает генерировать одни и те же последовательности.
# Переменная $captha_rnd будет содержать цифры для srand (после чего формируется циферки каптчи) хотите сохраняйте в БД, хотите распознавайте (как в каптче) используя <input type=hidden name=df value=$df>
$captha_rnd=int(rand(4294967295));
# Шифруем $captha_rnd
$df=&digdecode($captha_rnd);
print "<img src=\"$captcha_url?$df\" >";
###############
srand($captha_rnd);
$flood_dig='0000'.int(rand(100000));
($flood_dig)=($flood_dig=~/(\d{5})$/);
# Переменная $flood_dig (циферки на картинке).



Это сообщение отредактировал(а) Usmanec - 26.2.2009, 23:12
PM MAIL   Вверх
gcc
Дата 2.10.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



вот нашел модель http://search.cpan.org/~kazeburo/Catalyst-...ugin/Captcha.pm но дело не в этом...

подскажите, по каким причинам картинка может не выводиться в mod_perl?

в собственном сервере catalyst'a выводиться... в CGI по-моиму выдавалась нормально

может загловок криво выдается, но пока не нашел как посмотреть или поменять....

Это сообщение отредактировал(а) gcc - 2.10.2009, 14:22
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 2.10.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



в /myapp_server.pl -r выводиться

а в mod_perl2 не хочет


Код

sub index : Path : Args(0) {
    my ( $self, $c ) = @_;

    $c->stash->{template} = 'add.tt';

   # $c->stash->{captcha} = $c->create_captcha();

            $c->response->content_type('image/jpeg');   
   
    print $c->create_captcha();

}

PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 2.10.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



догадываюсь что проблема в  print $c->create_captcha(); то что mod_perl ее не видит через print ?

нашел метод body, но пусто тоже самое, как это отправить в mod_perl2?
 
Код

  $c->response->body( $c->create_captcha() );

PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 3.10.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



сделал, я наверное не допонял

в шаблон поставить:
Код

<TMPL_VAR NAME="captcha">


Код

    $c->stash->{captcha} = $c->create_captcha();

PM WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.