Alain: was ist an diesem script falsch ?

Beitrag lesen

hallo,
Ich komm da einfach nicht klar mit diesem total umgebauten cgi
Dieses cgi hat zwei funktionen oder zumindest sollte es die haben.
Es öffnett intern ein framset wenn der remonte User berechtigt ist,
bedingt dadurch dass sein username der selben IP die beim erstenmal
im log eingetragen wurde ist wie jetzt,ansonsten würde das script
wenn es im log den counterstand erreicht hat,den user eine denied
seite übergeben ,gleichzeitig dem webmaster ne mail senden...
Dies kurz zur funktion
Leider funktioniert das cgi nicht so wie ich möchte und wenn es funktioniert
dann krieg ich 10 mails auf einmal?!
Nun gut ich möchte es nicht spannend machen...
hier ist das vollständige cgi:
#!/usr/bin/perl -w

$siteid                =        'blabla';
$mailto         =        'webmaster@mydomain.com';
$mailprog         =        '/usr/sbin/sendmail';
$loginlog         =        'login';
$abusecount        =       9;
$maxusers        =        150;
$doflocks        = 1;
$date                 = date;
$date_today = join( " ", (split(" ",$date)) [1,2] );
$username         = $ENV{'REMOTE_USER'};
$ip_now         = $ENV{'REMOTE_ADDR'};
$ua_now = $ENV{'HTTP_USER_AGENT'} == /'AOL'/ ? "AOL": "noAOL";#ignoriert AOL user
@ips = ('211.222.99.226','62.2.230.2');

#if hacker IP exist
foreach(@ips)  {
if ($_ eq $ip_now)  {
print "Content-type: text/html\n\n";
print "access $_ denied !\n\n";
exit;
    }
}

print "Content-type: text/html\n\n";
$maxsize=$maxusers*8*2; #uname+pass average length is 8 chars
unlink($loginlog) if ((stat($loginlog))[7] > $maxsize);
exit if (!$username);

if (dbmopen(logins,$loginlog,0666))
{
flock(logins,2) if ($doflocks);

$ip_last,$ua_last,$count_last,$date_last) = split(/\*/,$logins{$username});

#if first time logging in today
if ($date_last ne $date_today)
 {
$count_last=0;
 }
elsif (($ip_last eq $ip_now) and ($ua_last ne $ua_now))#damit hab ich probleme
 {
 $count_last++;
 #if abuse suspected
  if ($count_last > $abusecount && length($username) > 2)

{
        &SendMail;
        }       }

sub SendMail {
open (MAIL, "|$mailprog -t");
print MAIL "To: $mailto\n";
print MAIL "From: $mailto\n";
print MAIL "Subject: AbuseBlock monitor for user: $username\n";
print MAIL "Abuse Block monitor script on $date_today for siteid $siteid reports:\n\n";
print MAIL "Username $username detected to be used $count_last times from different IP addresses (last\n";
print MAIL "IP was $ip_now). If you get 5 or more warnings for this user, go to blablabla... user detail $ENV{'HTTP_REFERER'} und $ENV{'HTTP_USER_AGENT'} \n";
close MAIL;
$count_last=0;
              }

$logins{$username} = ("$ua_now*$ip_now*$count_last*$date_today*");
dbmclose(logins);
flock(logins,8) if ($doflocks);  #ist dies an der richtigen stelle?

sub badpass {

print "<HTML>\n";
    print "<HEAD><TITLE>access denied</Title></HEAD>\n";
    print "<META HTTP-EQUIV="pragma" CONTENT="no-cache">\n";
    print "<META HTTP-EQUIV="REFRESH" CONTENT="2; URL=http://www.mydomain.com/abuse.htm">\n";
    print "<CENTER><H2>access denied for user $username with IP $ip_now  </H2>\n";
    print "<BR><H2>your Account was blocking \n";
    print "<BR><H2>for more jnfo mail to $mailto</H2>\n";
    print "<BR><H2>detected to be used 10 times from different IP addresses<BR>\n";
    print "</BODY>\n";
    print "</HTML>\n";
    exit;

}
&redir;

sub redir {

print "<HTML><HEAD><TITLE>Welcome </Title></HEAD>\n";
    print "<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">\n";
    print "<META HTTP-EQUIV="pragma" CONTENT="no-cache">\n";
    print "<frameset ROWS="100%,*" scrolling="no" frameborder="0" border="0" noresize>\n";
    print "<frame NAME="navigation" SRC="eingang.html" marginwidth="1" marginheight="1" scrolling="no" frameborder="0" border="0" noresize framespacing="0">\n";
    print "<noframes></HEAD>\n";
    print "<BODY BGCOLOR=#005050 TEXT=#00FF00 LINK=#00FFFF VLINK=#00FFFF ALINK=#FF0000>\n";
    print "<BR><Center><FONT SIZE=+4>Welcome</FONT>\n";
    print "<BR><FONT SIZE=+2>your Browser can not support frames or frameset <BR>please update your netscape or IE for see the frameset \n";
    print "<BR>If you need support mail to $mailto your problem and your  username with detail jnfo</FONT>\n";
    print "</BODY></noframes></frameset></HTML>\n";
    exit;
    } }

Wäre euch wircklich dankbar wenn ich wenigstens einen kleinen tip
bekommen würde bin (noch) Anfänger :-)
Gruss Alain
P.S.:use strict hat mir bisher auch nicht viel geholfen-leider