als schnelle Lösung hilft am besten, den Dateinamen des Gästebuchs-Skripts zu ändern.
Das sind ja keine "echten" Besucher, die die Seite aufsuchen und dann den Link zum Gästebuch anklicken, sondern Robots, die den action-Link des Gästebuchformulars gleich mit den eingetragenen Daten als Get- oder Post-Variablen aufrufen.
Eine einfaches Umbenennen des Dateinamens der Seite, die die Einträge abspeichert (also das was in action="..." im <form> tag steht reicht schon aus, dass die Bots das fürs erste nicht mehr finden (z.B. von gbook.cgi in gboook.cgi). Natürlich die Datei mit dem Originalnamen entfernen, die Adresse im <form> tag entsprechend ändern und eventuelle weitere Verweise dahin auch.
Eine ganz banale Methode für die Zukunft ist, in das Formular selbst ein hidden field mit einem Wert einzugeben (<input type="hidden" komme_von="formular"> oder so) und den Wert der Variable "komme_von" im Skript erst mal auszulesen, bevor irgendwas geschrieben wird.
Sobald die Spam-Attacken wieder beginnen, muss man nur noch den Wert von "komme_von" ändern und es ist wieder eine zeitlang Ruhe.
Etwas aufwändiger kann man genau das mit einem Session-Token machen: Beim Aufruf der Formularseite wird eine Zufallszahl aus dem aktuellen Timestamp generiert und als Wert in dieses hidden field und in einen Sessioneintrag abgelegt.
Beim Aufruf der Formular-Action wird der Wert im hidden field mit dem Wert in der Session verglichen.
Von Captchas (also kleinen Grafiken, die abgetippt werden müssen) halte ich nicht viel, es ist einfach nur lästig. Dazu kommt, dass diese Spambots immer besser werden, auch Grafiken zu "lesen" (ist im Prinzip nur eine OCR-Software). Je schwieriger es für den Spambot wird, umso schwieriger wird es auch für den Menschen. Barrierefreiheit sollte da vor gehen...
Man kann natürlich auch eine der Spamschutz-Datenbanken verwenden (Akismet oder Defensio). Dabei wird jeder Eintrag vor dem Speichern an die Datenbank gesendet, dort überprüft und ein "ok" oder "nicht ok" zurückgesendet. Aufwändig und für ein Gästebuch mit 15 Einträgen vielleicht zu viel des Guten, aber funktionieren tun die Teile gut (weil Lernfähig).
Ein paar kleine Tricks, die ohne viel Programmieraufwand Spams verhindern können:
1) Anzahl der URLs im Text begrenzen (Spams enthalten meist mehr als 2 URLs im Text, "echte" Einträge kaum)
2) Die Zeit zwischen zwei Skriptaufrufen erfassen und ein erneutes Absenden innerhalb einer bestimmten Zeit verbieten
3) Die Zeit zwischen Aufruf der Formularseite und des Skripts begrenzen (geht mit dem Session-Token)
|