IP-/ und Zeitsperren

IP-Sperre

Bei der IP-Sperre kann man das senden von z.B. HTML Formularen auf einer Webseite begrenzen.
Dabei wird nach der ersten Anfrage, die IP Adresse des Senders in einer Textdatei gespeichert, und erst nach einer definierten Zeit wieder für einen weiteren Request freigegeben.

function checkIP($ip) 
{ 
    // Zeit in Minuten fuer die IP Sperre 
    $iTime = 5; 
    // IP Datei oeffnen 
    $hfp = file('ip.txt'); 
    // Anzahl Zeilen fuer die Schleife 
    $iLines = sizeof($hfp); 
    $timestamp = time(); 
    // Neue Datei die am Schluss geschrieben wird 
    $strNewIPFile = ''; 
    for($i=0;$i<$iLines;$i++) 
    { 
        // Die Zeile anhand des Trennzeichens ';' splitten 
        $rgSplited = explode(";",$hfp[$i]); 
        // Wurde das Zeitlimit ueberschritten 
        if(($rgSplited[1]+ 60*$iTime) > $timestamp) 
        { 
            // die Zeile, die uns sagt, dass diese Zeit noch nicht  
            // aelter als $iTime ist in die neue Datei schreiben 
            $strNewIPFile .= $rgSplited[0].';'.$rgSplited[1]."\n"; 
            if($rgSplited[0] == $ip) 
            { 
                //Check ob die Zeit fuer die IP verstrichen ist 
                // Fehlermeldung ausgeben 
                echo 'Fehler'; 
                     exit;         
            } 
        }         
    } 
    // Die aktuelle IP schreiben 
    $newIPFile .= $ip.';'.$timestamp."\n"; 
    // Datei neu schreiben 
    $hFile = fopen('ip.txt', 'w'); 
    fwrite($hFile, $newIPFile, 1024); 
} // end of checkIP() 

Zeit-Sperre

Bei der Zeitsperre wird der Zugriff für eine definierte Zeit untersagt, egal welche IP die Anfrage hat.

function checkTime() 
{ 
    // Zeit in Minuten fuer die Zeitsperre 
    $iTime = 5; 
    $hfp=file('time.txt'); 
    $timestamp=time(); 
    $strNewFile = ''; 
    if(($hfp[0]+(60*$iTime)) > $timestamp)   
    { 
        echo 'Fehler'; 
        return false; 
    }  
   fclose($hfp); 
   $strNewFile=$timestamp; 
   $hFile = fopen('time.txt', 'w'); 
   fwrite($hFile, $strNewFile, 256);  
   return true;        
} // end of checkTime()  

Aufrufen der Funktionen

Die Funktionen befinden sich in der Datei sperren.php. 
Zu beachten ist das im selben Verzeichnis 2 Dateien mit dem Namen ip.txt und time.txt mit dem entsprechenden Schreibrecht befinden.
 
Der Aufruf kann nun so erfolgen:

include('sperren.php'); 
// IP Adresse ermitteln          
$strIP = $_SERVER['REMOTE_ADDR']; 
// IP Sperrenaufruf  
checkIP($strIP); 

// Zeitsperrenaufruf 
if(checkTime() == true) 
{ 
    //... mach was 
}