Homepage Inspire-world | Forum
CGI/Perl Workshops Eine universelle Floodsperre

 Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Eine universelle Floodsperre
Hier eine universell einsetzbare Floodsperre die in fast jedes Script eingebaut/nachgerüstet werden kann.

Der Bereich des Scriptes der geschützt werden soll muss dann diesen Subroutinenaufruf erhalten.

&floodcheck;

Die Subroutine, diese muss natürlich auf die gegebenheiten abgestimmt werden.
##########################################################
sub floodcheck { 
$wartezeit = "1.0"; 
$sperrlistenlaenge = 15; 
my $IP_Nummer = $ENV{'REMOTE_ADDR'};
my $aktionszeit = time(); 
unless (-e "Zeitlimit") { 

mkdir ("Zeitlimit", 0777); 
chmod(0777, "Zeitlimit"); 
} 
open(ZEITLIMIT, "Zeitlimit/limit.dat"); 
@letzte_eintraege = <ZEITLIMIT>; 
close(ZEITLIMIT); 
foreach (@letzte_eintraege) { 
if (/^$IP_Nummer/){ 
($junk,$letzte_aktionszeit) = split(/\|!!\|/,$_); 
chomp($letzte_aktionszeit); 
last; 
} 
} # ende foreach 
$wartezeit *= 10; # zeit in sek bis neu gepostet werden darf 

if ( int(($aktionszeit - $letzte_aktionszeit) < $wartezeit)){ 
print qq~
<div align="center">
<font face="Verdana, Arial" size="5">
<b>Anti Spam Protection</b></font><br> 
<font face="Verdana, Arial" size="2" color="#ff0000"><b>
Sie müssen $wartezeit Sekunden warten bis Sie wieder eine Aktion ausführen können.
</b></font>
</div>
~; 
exit; 
} 
else { 
if (unshift(@letzte_eintraege, "$IP_Nummer|!!|$aktionszeit\n") > $sperrlistenlaenge){ 
$#letzte_eintraege = $sperrlistenlaenge; 
} 

open(ZEITLIMIT, ">Zeitlimit/limit.dat"); 
print ZEITLIMIT @letzte_eintraege; 
close(ZEITLIMIT); 
} 
return 1; 
}
Die 10 bei $wartezeit *= 10; # zeit in sek bis neu gepostet werden darf ist das einzige was normalerweise angepasst werden muss.

Der Bereich der Fehleranzeige kann beliebig gestaltet werden.
print qq~
<div align="center">
<font face="Verdana, Arial" size="5">
<b>Anti Spam Protection</b></font><br> 
<font face="Verdana, Arial" size="2" color="#ff0000"><b>
Sie müssen $wartezeit Sekunden warten bis Sie wieder eine Aktion ausführen können.
</b></font>
</div>
~; 
Demo: Testen



 Zum Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Eine universelle Floodsperre
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!