Um das Flooden (= Zumüllen mit großen Mengen meist sinnlosen Inhalts) von Foren und
Gästebüchern etc. zu erschweren oder um zu verhindern das nach dem absenden des Formulars und
drücken der
F5-Taste die Daten nochmals eingetragen werden, kann die hier vorgestellte Floodsperre
einen Schutz bieten.
Demo:
Innerhalb der Sperrzeit kann das Formular vom selben Benutzer nicht mehrmals gesendet werden.
In diesem Demo ist eine Sperrzeit von
10 Sekunden aktiv.
Die IP-Adresse und das Datum werden in einer Datei ("floodsperre.dat") gespeichert. Damit die Datei
nicht unendlich groß wird, werden nur die letzten zehn Einträge (kann eingestellt werden) beibehalten.
Machen Sie die Sperrzeit nicht zu lang, das verärgert nur die Benutzer

Es muss nicht unbedingt ein Hinweis auf eine (kurze) Sperrzeit ausgegeben werden.
Quelltext: „
floodsperre.php”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<!DOCTYPE html> <html> <head> <title>IP basierte Floodsperre - Demo</title> </head> <body>
<form action="" method="post"> Name: <input type="text" name="name"> <input type="submit" value="absenden"> </form>
<?php /* IP basierte Floodsperre - Version vom: 03.07.2011 Homepage-Total.de */
error_reporting(E_ALL | E_STRICT);
// Floodsperre - Innerhalb der Sperrzeit kann das Formular // vom selben Benutzer nicht mehrmals gesendet werden. $floodsperrzeit = 10; // Sperrzeit in Sekunden
// Datei in der die IP und der Zeitstempel gespeichert werden sollen. $flooddatei = "floodsperre.dat";
// Die letzten X-Einträge speichern $letzte_eintraege = 10;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// IP und Zeitstempel in der Flooddatei überprüfen if (file_exists($flooddatei)) { $flood = false; foreach (file($flooddatei) as $element) { list($ip, $zeit) = explode("|", $element); if ($ip == $_SERVER["REMOTE_ADDR"]) { if ((floor((time() - $zeit))) < $floodsperrzeit) { $flood = true; } } } if ($flood == true) { echo '<p>' . $_POST["name"] . ', Sie müssen ' . $floodsperrzeit . ' Sekunden warten bis Sie wieder einen Namen eintragen können!<p>'; } else { // Name ausgeben, E-Mail versenden, in Datenbank eintragen, etc. echo '<p>Hallo ' . $_POST["name"] . '!</p>'; } }
// Flooddatei erzeugen und Schreibrechte setzen if (file_exists($flooddatei) === false) { file_put_contents($flooddatei, "123|123|\n"); if (is_writeable($flooddatei) === false) { chmod($flooddatei, 0755); } }
// IP und Zeitstempel in der Flooddatei speichern $array = file($flooddatei); $array = array_slice($array, -$letzte_eintraege); $fh = fOpen($flooddatei, "w"); fLock($fh, 2); fPuts($fh, implode("", $array) . $_SERVER["REMOTE_ADDR"] . "|" . time() . "|\n"); fLock($fh, 3); fClose($fh);
} ?>
</body> </html>
|
Bei diesem PHP-Script handelt es sich nur um ein Beispiel, für die Verwendung
in einem Programm muss das Script entsprechend angepasst werden.