#1 29. April 2007 Zuletzt von einem Moderator bearbeitet: 15. April 2017 Techniken gegen Spam in Foren/GBs etc. Nabend Community, da hier oft PHP - Postings zu dem im Topic genannten Thema sind, wollte ich mal ein Sammelthread über dieses Thema aufmachen, besonders da ich zu der Überzeugung gekommen bin, dass es kein alleinrichtiges Rezept gibt sondern der Mix es macht ... Wie geht ihr so vor? Was empfehlt ihr? Den Anfang mache ich .... 1. HTTP - Request Ich benutze ein Objekt was die Formulardaten validiert und ausgibt. Ich unterscheide nicht zwischen GET- und POST - Parametern, obwohl dies in manchen Situation zu empfehlen ist. Aber da ich beide Dinge gleich validiere und bei der Validierung auch keine Ausnahme mache, halte ich dies nicht für kritisch. Ich benutze diese Funktion PHP: Typecasting für HTML - Formulardaten - RR : Board [/ URL ] zur Validierung . Mein Request - Objekt geht so vor , dass bei Formulardaten die mit einem "s" für String anfangen , die Validierung für Strings genutzt wird , bei Daten mit einem Parameternamen und einem "i" beginnend , wende ich typecasting zu int an usw . In Allen scripten wird dann typensicher weitergearbeitet und auch so z . B . in einer Datenbank gespeichert . [ B ][ U ] 2. Reloadsperre [/ U ][/ B ] Eine Reloadsperre wird bei mir standardmäßig mit einer Session vollzogen . "Manuelle" Cookies benutze ich dort eigentlich nicht so gerne . Mein Server ist jedoch so eingestellt dass der Sessionmechanismus generell nur mit Cookies arbeitet , ohne die GET - Anhängsel der SID . Hier kann die Kritik eingewendet werden dass manch ein BOT keine ( Session )- Cookiedaten im HTTP - Header mitsendet aber da kommen wir zu den nächsten zwei Punkten .... [ B ][ U ] 3. Variabler Absendebutton [/ U ][/ B ] Der Button zum Absenden wird mit einem zufälligen Namen benannt . Dieser Name wird in einer Session gespeichert . Sollte der Name des Buttons nicht mit dem generierten Namen in der Session übereinstimmen wird nicht gepostet . Ich denke dieses Vorgehen hat die Wirkung , dass Formularen nicht so schnell exploited werden können . [ B ][ U ] 4. Captchas [/ U ][/ B ] Captchas sind diese kleinen Bilderrätsel die man z . B . bei Rapidshare findet . Ich benutze für meine Formulare das PEAR - Paket TEXT_CAPTCHA wofür ich zusätzlich einen Adapter gebaut habe , der mit statischen Methoden arbeitet und mir so ermöglicht den Captchamechanismus zu ändern / auszutauschen , ohne all meine Quellcodes bearbeiten zu müssen . Das zu suchende Wort wird in der Session gespeichert und muss in einem Formularfeld mit variablen Namen ( siehe 3 ) eingetragen werden . Sollten die POST - Daten nicht mit den Sessiondaten übereinstimmen wird ein Fehler geworfen . Mit 3 u . 4 zwinge ich den User den Sessionmechanismus zu benutzen und binde ihn zusätzlich mit einer .... [ B ][ U ] 5. Datenbankspeicherung ...[/ U ][/ B ] ... an seine Session . Ich logge bei jedem Login der User / bei jedem Postversuch die IP in Kombination mit UserAgent , Timestamp , PHPSESSID etc . in einer Datenbank . Sollte ein Datenbankeintrag schon vorhanden sein wird er natürlich nicht nochmal reingeschrieben . Diese Tabelle kann / könnte auch für andere Zwecke genutzt werden wie z . B . IP - Block etc . .... Dieses Datenbanklogging hat auch den Vorteil , dass es so sehr schwer gemacht wird die Session eines anderen Users zu klauen und anderen Schindluder damit zu treiben . [ B ][ U ] 6. Datenbankfeder richtig erstellen ...[/ U ][/ B ] Um zusätzlich Redundanzen zu vermeiden und die Datenbank ordentlich aufzusetzen versuche ich so viele Felder wie möglich mit einem Index zu versehen und diese unique zu setzen . So bitte weiter im Text ... Da ich morgen arbeiten muss und es eigentlich schon recht spät für mich ist hoffe ich dass meine nicht allzu deutlichen Beschreibungen mein Vorgehen recht gut verdeutlichen .... + Multi-Zitat Zitieren
#2 30. April 2007 AW: Techniken gegen Spam in Foren/GBs etc. ich mach mal weiter: 7. Bild mit Rechenaufgabe Man benutzt wie bei den Captchas ein Bild in dem eine kleine Rechenaufgabe dargestellt wird. Diese Sollten jedoch so einfach wie möglich gehalten werden. z.B. 1+2 oder 3-1. Das Ergebnis wird dann in einer Session abgespeichert und mit der Eingabe der Users verglichen. Falls der User rechnen kann und das richtige Ergebnis eingetragen hat. kann er posten. 8. Sprachmitteilung Etwas umständlicher, aber bis jetzt relativ sehr sicher, ist das Vorlesen lassen eines Schlüssels. Diesen Schlüssel muss man dann eingeben. Die Sprachmitteilung soll nur die Prüfungsnr vorlesen. bsp: 12345. Dies kann gut durch eine Flash lösung bzw einfach durch zufall abspielende mp3, wma etc. gelöst werden. Das auslesen der Sprache ist nach meinen Kenntnissen noch nicht allen Bots bekannt. Also wird reden hier von einer Sicherheit von mehr als 90%. + Multi-Zitat Zitieren