21. februar 2006 - 13:04
Der er
6 kommentarer og
1 løsning
IP banning
Davser
Emnet er blevet berørt i andre tråde, men jeg vil nu tillade mig alligevel at poste en variant af tidligere indlæg.
Er det muligt at lave et ip banning system der :
Blokerer ip-adresser HVIS den pågældende ip-adresse foretager mere end f.eks. 5 "serverhits" pr. sekund i 60 sammenhængende sekunder.
Systemet skulle også kunne konfigureres således at visse ip-adresser ikke blokeres trods mange hits.
Formålet med systemet er at blokke ip'er hvor der i realiteten er tale om email harvesting, web grabbing m.v.
Forslag til kode modtages gerne.
21. februar 2006 - 17:45
#2
Hvorfor banne ?
Brug nedenstående counter. Den registrerer kun en IP én gang og venter så 10 minutter før samme IP kan registreres igen.
<?
$expire= 600;
$logfile= "counter.log";
$incpath=substr(__FILE__, 0, strrpos(__FILE__, "/")+1);
$logfile=$incpath.$logfile;
$ip= getenv('REMOTE_ADDR');
$visits=0;
$badhit= false;
$now= time();
$ips = array(array());
if (file_exists($logfile)){
if ($loggedips=file($logfile)){
$visits=trim($loggedips[0]);
for ($i=1; $i< count($loggedips); $i++){
$loggedips[$i]=trim($loggedips[$i]);
$ips[$i] = explode('||', $loggedips[$i]);
if (($ips[$i][0]==$ip) && ($now-$ips[$i][1]< $expire))
$badhit= true;
}
if ($badhit)
echo $visits;
else{
$visits++;
$fp= fopen($logfile, 'w');
fputs($fp,"$visits\n");
for ($i=1; $i< count($loggedips); $i++){
if ($now-$ips[$i][1] < $expire)
fputs($fp, $ips[$i][0]."||".$ips[$i][1]."\n");
}
fputs($fp, "$ip||$now\n");
fclose($fp);
echo "<font face='Verdana' size='1' color='#000066'>".$visits;
}
}
}else
echo "Logfil ikke fundet";
?>