Kommentarspam mit PHP per IP-Sperre verringern
Für irgendwelche Unannehmlichkeiten, den RSS-Feed betreffend, möchte ich mich entschuldigen. Wahrscheinlich werden sämtliche Einträge als neu bzw. ungelesen gekennzeichnet, obwohl dem nicht so ist.
Ich hatte gerade eine Menge Ärger mit Kommentarspam, und als ich diesen Spam in meinem Kommentarsystem (wer ahnt beim Programmieren schon sowas …) per Hand löschen musste, habe ich dummerweise eine Datei zuviel gelöscht – nämlich die Metadata-Datei, die die Veröffentlichungsdaten der einzelnen Einträge enthielt. Und wie es dann immer so ist: Das letzte Backup war schon drei Wochen alt.
Aber wo ich nun schon mal dabei war, habe ich gleich etwas gegen diesen unsäglichen Kommentarspam unternommen. Weil ich aus verschiedenen Gründen keinen Captcha (kurz gesagt muss man dort alphanumerische Zeichen aus einem angezeigten Bild in ein Formularfeld übertragen, um sich als menschliches Wesen zu identifizieren) installieren wollte, habe ich eine andere Lösung implementiert, eine IP-Sperre.
In einem Zeitraum von 15 Minuten können jetzt nur noch zwei Kommentare abgegeben werden. Hier der PHP Quelltext, der im oberen Bereich an eigene Bedürfnisse angepasst werden muss (Sie können dort z. B. auch 5 Kommentare pro 120 Minuten oder 1 Kommentar pro Tag [1440 Minuten] erlauben):
Achtung: Bitte legen Sie unbedingt einen neuen Ordner für die Kommentar-IPs an.
Verwenden Sie nicht irgendeinen vorhandenen Ordner, da alle Dateien, die älter als die eingestellte Zeitspanne sind, in diesem Ordner gnadenlos gelöscht werden!
Sie wurden gewarnt!
<?php
// Pfad zum Kommentar-IPs Ordner mit schließendem Slash
$kommentar_ip_folder = "/SERVER/PFAD/ZU/kommentar_ips/";
// Zeitspanne in Minuten
$kommentar_intervall = 15;
// Anzahl erlaubte Kommentare während der angegebenen Zeitspanne
$kommentar_anzahl = 2;
/* Ab hier nur noch Veränderungen vornehmen, wenn
Sie wissen, was Sie tun.*/
// Ermitteln der IP-Adresse
$remote_host = $_SERVER["REMOTE_ADDR"];
// Speichern der IP-Adresse, falls sie noch nicht existiert
$user_ip = $kommentar_ip_folder.$remote_host;
if (!file_exists("$user_ip")) {
$ip_file = fopen("$user_ip","w+");
fwrite($ip_file,"0");
fclose ($ip_file);
}
// Dateien älter als n Minuten werden gelöscht
$handle = opendir($kommentar_ip_folder);
while ($ipfile = readdir($handle)) {
$ipdate = filectime($kommentar_ip_folder.$ipfile);
if ($ipdate < (time() - (60*$kommentar_intervall))) {
@unlink($kommentar_ip_folder.$ipfile);
}
}
closedir($handle);
// Ermitteln der Anzahl der abgegebenen Kommentare
if (file_exists("$user_ip")) {
$kommentare_gesamt = file($user_ip);
$kommentare_gesamt = $kommentare_gesamt[0];
if ($kommentare_gesamt == $kommentar_anzahl) {
echo 'Mehr als '.$kommentar_anzahl.' Kommentare pro '.$kommentar_intervall.' Minuten sind nicht erlaubt.';
exit;
} else {
$kommentare_gesamt ++;
$ip_file = fopen("$user_ip","w+");
fwrite($ip_file,"$kommentare_gesamt");
fclose ($ip_file);
}
}
?>
Das Skript macht folgendes: Drückt jemand auf den Kommentar absenden-Button, wird geprüft, ob die IP-Adresse des Absenders im Ordner $kommentar_ip_folder bereits existiert. Falls nicht, wird sie neu angelegt.
Im nächsten Schritt wird jede Datei im Ordner $kommentar_ip_folder daraufhin gecheckt, ob sie älter als die eingestellte Zeitspanne sind; falls ja, wird sie gelöscht.
Im dritten Schritt wird überprüft, wieviel Kommentare der Absender bereits abgegeben hat. Ist die eingestellte Anzahl erreicht, wird der User darauf hingewiesen und das Skript über exit verlassen, andernfalls wird die Anzahl der vom User abgegebenen Kommentare um 1 erhöht und der Kommentar wird gepostet.
Sie können obigen Quelltext entweder direkt in eine vorhandene PHP Datei kopieren oder ihn als Datei speichern und über include() einbinden. Beides muss an der richtigen Stelle, also direkt nach dem Submit des Kommentar absenden-Buttons erfolgen.
Ähnliche Beiträge:
Queen Latifah - The Dana Owens Album Ich fasse es nicht
Kommentare:
Bei den Kommentaren handelt es sich um fremde Inhalte, die sich „esse est percipi“ nicht zueigen macht. Verantwortlich für den Inhalt eines Kommentars ist der jeweilige Verfasser.
Hallte ich für ausgesprochen sinnlos!
Die wechseln die IPs schneller als Du PHP buchstabiert hast.
Musste mich die letzten 4 Tage mit über 250 Spammer-Angriffen rumärgern. Keine zwei kamen von einer IP :-(
Egal – ich lasse da nichts unversucht. Bei mir kamen die letzten übrigens tatsächlich alle von einer IP-Nummer. Ich habe nebenbei auch diverse andere Maßnahmen getroffen, z.B. die gängigen Freemail-Adressen, ganz Russland und ganz China geblockt ;-) Referrerlose Zugriffe lasse ich bis jetzt noch durch, die werden dann, falls alles nichts hilft, in der nächsten Stufe ausgesperrt.
Bei mir ist die Kommentarfunktion nach 14 Tagen nur noch moderiert möglich. Die Seite welche die Kommentare freischaltet listet alle Kommentare auf, default ist löschen pro Kommentare eingestellt. Ich hatte so übers Wochenende 214 Kommentare in „alten“ Artikeln, 2 habe ich freigegeben – 212 gelöscht. Dauer der Aktion 2 Sekunden. Funktioniert für mich gut da ich noch nie Kommentare in aktuell sichtbaren Artikeln hatte.
Kurios: vor zwei Tagen habe ich gebloggt, dass qxm eine Sperre eingebaut hat und mein System bisher verschont geblieben sei, heute kam der erste große Angriff der Bots.
Ich persönlich habe mich für ein Captcha entschieden, da selbst mit IP-Sperre immernoch ein Kommentar vom Spambot abgesetzt werden kann.
Kommentar schreiben:
FAQ (Häufig gestellte Fragen)
Kommentare:
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Henning zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Mesrop zu Harbor – Sicherer Hafen [Testflight]
- Michael Preidel zu Hopper 1.0b7 (Update: 1.0b9)
Schlagwörter

