Hallo,
ich möchte an dieser Stelle mal ein kleines Brainstorming über das Thema Formularspam machen. Konkret geht es darum, ein Formular für Benutzerkommentare bzw -nachrichten (Kontaktformular) zu entwickeln, dass ohne allzu viel Aufwand und out-of-the-box halbwegs resistent gegen Spam ist.
Welche Möglichkeiten zur Absicherung gibt es, welche sind sinnvoll, und von welchen sollte man sich fernhalten:
1. Timestamp
Beim Betreten des Formulars wird der aktuelle Timestamp erfasst und beim Absenden geprüft. Ist die Differenz sehr klein, etwa <2 Sek, kann man davon ausgehen, dass kein normaler Nutzer das Formular ausgefüllt hat. Ist er zu groß, etwa >30 Min, könnte das ein recht sicherer Anhaltspunkt dafür sein, dass das Formular von einem Spider erfasst wurde und nun "von außen" (mit dem bei der Erfassung aktuellen Timestamp) gespammt wird.
Fazit: leicht zu implementierende Methode. Der Timestamp darf allerdings nicht im Klartext erfasst werden. Der normale Benutzer erfährt keine nennenswerten Einschränkungen -> sollte sein Ausfüllen mal über 30 Minuten gebraucht haben, bekommt er einen entsprechenden Hinweis und kann über den Back-Button zurück zu seiner Eingabe, um sie dann erneut abzusetzen. Zu bedenken: ein frisch gespidertes Formular kann für den Zeitraum bis zum zweiten Wert, hier 30 Minuten, für Spam genutzt werden. Außerdem bleibt die Frage, ob nicht vielleicht auch ein Spambot in der Lage ist, den Back-Button zu drücken? ;)
2. Vorschau
Hat sich beim Blogtool Textpattern als sinnvoll erwiesen: die "Zwangsvorschau" der eingegebenen Formulardaten. Das eigentliche Senden der Daten erfolgt also erst im zweiten Schritt beim Submit der Vorschauseite. Durch ein Weiterreichen von generierten Formularwerten lässt sich verifizieren, dass der Benutzer/der Spambot zwangsläufig das erste Formular benutzt haben muss, um zum zweiten Formular (der Vorschau) zu gelangen. Ein Direktzugriff auf das zweite Formular und Spam "von außen" kann dadurch ausgeschlossen werden.
Für den Benutzer entsteht allerdings eine leichte Einschränkung: es ist nicht mehr nur ein Klick bis zum Ergebnis, sondern aufgrund der Zwangsvorschau zwei Klicks. Und sollte die Vorschau nicht auffällig genug sein, "verliert" man als Betreiber evtl ein paar Benutzer, weil sie das finale Absenden in der Vorschau nicht bemerken und davon ausgegangen sind, dass ihr Kommentar bereits beim ersten Klick versendet wurde.
3. Analyse des Benutzerkommentars
Prüfung auf Badwords, zu viele Links oder sonstige "böse" Inhalte. In meinen Augen nicht sonderlich sinnvoll, da zum einen nicht allzu leicht zu implementieren (etwa bei Badwords: die Datenbank muss aktuell gehalten werden, Varianten von Badwords müssen erfasst werden, z.B. V1agra), und zum anderen nicht eindeutig, etwa im Fall von zu vielen Links: werden mehr als z.B. 3 erkannt, wird Spam vermutet, kann aber nicht eindeutig bestimmt werden. Unterm Strich also längst keine nachhaltige Methode, um Spam einzudämmen.
4. Abgleich mit Spamlisten
Vorm Absenden des Formulars wird die IP-Adresse mit den diversen Spamlisten abgeglichen, die im Netz verfügbar sind (etwa Spamhaus.org).
Probleme/Nachteile: 1. Die Listen sind nur bedingt aktuell, 2. sie enthalten vermutlich nur einen Teil der Spam-IPs, 3. sie müssen beim Versenden des Formulars abgefragt werden (Performanceverlust), 4. sie sind nicht immer verfügbar (Serverausfall), 5. sie schließen u.U. ganze Nutzergruppen aus und 6. sie sind "user generated", so dass immer auch die Gefahr von Manipulation besteht und auch "gute" Benutzer-IPs ausgeschlossen werden könnten.
5. Prüfung auf Massenversand
Typische "Flooding"-Maßnahmen, etwa, dass ein Benutzer maximal x Kommentare innerhalb eines bestimmten Zeitraums hinterlassen darf.
Problematisch: bezieht sich auf IP-Adressen, ist damit kein sicherer Schutz vor Spam mit wechselnden IPs, und schließt zudem u.U. ganze Nutzergruppen aus.
6. CATCHPAs
generierte Grafiken, die Zeichen abbilden, die vom Nutzer im Klartext eingegeben werden müssen, um ein Formular zu versenden.
Positiv: bieten zurzeit noch recht hohe Sicherheit, die jedoch zukünftig nachlassen wird, sobald die automatische Erkennung von Zeichen wirksamer wird.
Besonders negativ: deutliche Einschränkung des Benutzers.
Das sind ein paar gängige Methoden zur Absicherung, die mir gerade eingefallen sind. Sicherlich gibt es viele weitere.. ich hoffe, dass möglichst viele davon hier im Thread aufgeführt und diskutiert werden. Interessant zu wissen ist vielleicht auch, welche Vorkehrungen Wordpress' bekanntestes Anti-Spam-Plugin Asikmet trifft - nach eigener Aussage "hundreds of tests". In der Praxis schlägt es sich damit ganz gut, auch wenn viele dieser Tests vermutlich "Schüssen ins Blaue" gleichen und allenfalls per Zufall Spamkommentare finden.
Mir scheint es zurzeit ganz sinnvoll, mindestens auf den Timestamp zu setzen, weil die Methode schnell zu implementieren ist und den Nutzer nicht einschränkt, und zusätzlich die Vorschau zu aktivieren, um ohne viel Aufwand den vorbeirauschenden 1st-click-Spam zu unterbinden.
Bin gespannt auf eure Rückmeldungen!
Viele Grüße!
_ds
--
"Ey, Pocher! Was machsu in Berlin? Schwul... oder was?"
Das kleine Seitenschwein,
Schwuloderwas?