Защита почты с сайта на перл

Тема в разделе "Perl программирование", создана пользователем proparket, 22 мар 2008.

  1. proparket

    proparket Гость

    Всем доброго дня или вечера.
    Есть на моем сайте почта (на перле .cgi) и все работает и в архив отлично пишет. Но как в плохих романах есть всегда это "но". Было уже три раза как мне спамили из сайтовой почты (с одним и тем же текстом). В последнее время проводил доработку своего форума и доски объявлений с помощью автора скрипта Spamcode (содержит генератор картинки с буквами, проверка на мат и корякский язык) - один из вариантов капчи. В данный момент автор работает над своим проектом CMS и я не могу его отвлекать, а у меня самого ничего не выходит. Я учился на художника, а не на программера.
    Требуется вставить в тело скрипта почты проверку на spamcode, проверку формы "message" на предмет запретных слов и вывод текста при какой-либо ошибке. Я, конечно, пробовать могу только методом тыка и при помощи корявых мозгов получается только 500 ошибка.
    Вот и шастаю по форумам - кто бы помог справиться
    Код (Text):
    #!/usr/bin/perl

    $mailprog = '/usr/lib/sendmail';
    $thank_url = 'http://www.proparket.ru/thankyou.htm';
    $archivefile = 'contact.txt';
    $toname = 'Почта с сайта Proparket';
    $tomail = 'moy@mail.ru';

    @months = ("Января","Февраля","Марта","Апреля","Мая","Июня",
    "Июль","Августа","Сентября","Октября","Ноября","Декабря");
    $at = "в"; # ..это "в" для времени русского языка;

    $timeoffset = +3;
    $timezone = '(GMT)';

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

    @pairs = split(/&/, $buffer);

    foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);

    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/<!--(.|\n)*-->//g;

    $FORM{$name} = $value;
    }

    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time+$timeoffset*3600);
    $time = sprintf("%02d:%02d",$hour,$min);
    $year += 1900;
    $date = "$mday $months[$mon] $year $at $time $timezone";

    open(HANDLE,"|$mailprog -t") || die "Can't open $mailprog!\n";
    &send_message;
    close(HANDLE);

    open(HANDLE, ">>$archivefile") || die "Can't open archive file for writing: $!";
    &send_message;
    print HANDLE "\n=======================================\n\n";
    close(HANDLE);

    print "Location: $thank_url\n\n";;

    sub send_message {
    print HANDLE "To: $toname <$tomail>\n";
    print HANDLE "From: $FORM{'name'} <$FORM{'email'}>\n";
    print HANDLE "Subject: $FORM{'subject'}\n\n";
    print HANDLE "$date\n";
    print HANDLE " Это сообщение пришло со страницы $ENV{'HTTP_REFERER'}.\n";
    print HANDLE " IP адрес: $ENV{'REMOTE_ADDR'}, Remote host: $ENV{'REMOTE_HOST'}.\n";
    print HANDLE " Сайт пользователя: $FORM{'url'}\n";
    print HANDLE "------------------------------\n\n";
    print HANDLE "$FORM{'message'}";
    }
    А вот части кода, которые требуется вставить в этот скрипт:

    Код (Text):
    ############открытие библиотеки для spamcode#############
    ($root) = split(/\/cgi-bin\//, $ENV{SCRIPT_FILENAME});
    $lib = "$root/cgi-bin/lib";
    require "$lib/spamlib.pl";
    ############проверка на spamcode#############
    $code=lc($input{'code'});
    if($code ne &GetSPAMCode) {
    print "<font color=\"#b10000\"><h2>Не в состоянии записать сообщение</h2>\n";
    print "<font size=\"2\">Вы ошиблись при вводе графического кода!</font><br></font>\n";
    exit;
    }

    ############проверка на нежелательные слова#############
    $CheckBW = &CheckBW(\$input{'message'});
    if($CheckBW >= 10){
    print "<font color=\"#b10000\"><h2>Не в состоянии записать сообщение</h2>\n";
    print "<font size=\"2\">В сообщении содержится масса нежелательных выражений!</font><br></font>\n";
    exit;
    }

    if($CheckBW >= 5){
    $e_count++;
    &cerror("В сообщении содержатся нежелательные выражения!<br>\n");
    }
    Для любопытствующих могу и целиком (поподробнее) выложить.
    Посмотрел бы кто. Может в процессе записи-перезаписи вкралась ошибка синтаксическая, но может и программная. HELP
     
  2. Vovochka

    Vovochka Гость

    Смотреть надо в логах апача, что в каком месте валится.
     
Загрузка...
Похожие Темы - Защита почты сайта
  1. fear
    Ответов:
    2
    Просмотров:
    130
  2. Skip
    Ответов:
    8
    Просмотров:
    524
  3. serg24
    Ответов:
    0
    Просмотров:
    1.080
  4. Clodan
    Ответов:
    1
    Просмотров:
    1.301
  5. cdtnf
    Ответов:
    0
    Просмотров:
    1.307

Поделиться этой страницей