Spam-Schutz für Gästebuch

  • Themenstarter Themenstarter starfoxfs
  • Beginndatum Beginndatum
Mit Templates arbeite wäre z.B. eine Möglichkeit. Da kann man die Daten dann nach allen Operationen ausgeben.
 
Bau dir doch eine IP Sperre ein.

1. Schritt IP auslesen und abspeichern
2. Schritt zuerst überprüfen ob IP vorhanden, wenn JA
3. Zeitprüfen (24h)
4. IP älter als 24h = Posten sonst nicht Posten

Es gehen eigentlich so ziemlich alle Möglichkeiten hier. Evt. musst du dein PHP Script ein wenig bearbeiten.

gruss
 
Also ich mache es seit einiger Zeit mit einer Eingabe eines zufällig erzeugten Codes. zb. 3659 oder so, klappt prima. Keine Spameinträge mehr.

mfg Matthias
 
Bau dir doch eine IP Sperre ein.

1. Schritt IP auslesen und abspeichern
2. Schritt zuerst überprüfen ob IP vorhanden, wenn JA
3. Zeitprüfen (24h)
4. IP älter als 24h = Posten sonst nicht Posten

Es gehen eigentlich so ziemlich alle Möglichkeiten hier. Evt. musst du dein PHP Script ein wenig bearbeiten.

gruss
Eine schlechte Lösung... damit wirst du frühe oder später auf Probleme stoßen.
Die Lösung mit dem Zufalls-Code (auch Captcha genannt) die mcone angesprochen hatte, halte ich für die bessere Lösung :)
 
Ich würde auch zum Captcha raten. Es löst Spam und ungewollte Doppelpostings und selbst grafische Captchas sind gar nicht so schwer wie die meisten wahrscheinlich denken. Noch besser sind logische Captchas, die sind dann auch Behindertengerecht... :) da können auch die Moralapostel nichts mehr sagen.

Für alle die keine Ahnung haben wie das gehen soll hier mal ein kurzer Leitfaden für ein
einfaches Text-Captcha:

1. In der Datei die die Formulatdaten des Benutzers aufnimmt wird ganz zu Beginn der Session Start - Befehl ausgeführt... dann wird neben den normalen GB Eingabemöglichkeiten ein Fragetext ausgegeben. Zum Beispiel "Was ist x + y"? Für x und y werden Zufallszahlen ausgegeben (natürlich nur kleine, es soll ja dem User keine Schwierigkeiten machen), Alternativ können auch andere Fragen und Aufgaben zum Beispiel aus einer Textdatei genommen werden.

Die Idee ist natürlich die korrekte Antwort in einer Session Variable zu speichern.


2. In der Datei die das Formulat verarbeitet ist ebenfalls zu Beginn die Session zu starten und bei der Prüfung der Formulardaten kann die angegebene Captcha Antwort mit der korrekten in der Session Variable vergleichen werden....

Für ein billiges aber in den meisten Fällen ausreichendes Textcaptcha sind am vorhandenen Quelltext meist 20 Zeilen Code ausreichend .. :)

Ich hab hier sogar noch ein altes PNG Captcha von mir rausgekramt, vllt mag es ja jemand benutzen...

In den HTML Quelltext einfach ein <img src="png_code.php"> notieren
und die png_code.php befüllen mit:

PHP:
<?php 
  // Session starten und Zufallszahlengenerator initialisieren
  session_start();
  srand(microtime()*1000000);

  // code ausdenken und in der Sessionvariable merken
  for ($i = 0; $i < 5; $i++)
    $_SESSION["code"][$i] = (rand(0,1))? chr(rand(65, 90)) : chr(rand(49, 51));
    
  // Bild generieren
  $width  = 140;
  $height = 30;
  $p      = ImageCreate($width, $height); 
  $col    = ImageColorAllocate($p, rand(220,255), rand(220,255), rand(220,255));
  
  // "Hintergrundrauschen"
  for ($i = 0; $i < 10; $i++) {
    $col = ImageColorAllocate($p, rand(200,255), rand(200,255), rand(200,255));
    ImageLine($p, 0, rand(0,$height), $width, rand(0,$height), $col);
    ImageLine($p, rand(0,$width), 0, rand(0,$width), $height, $col);
  }
  
  // 5 Farben für die 5 Captcha Ziffern generieren
  $c1 = ImageColorAllocate($p, 30 + rand(1,120), 30, 30);
  $c2 = ImageColorAllocate($p, 30, 30 + rand(1,120), 30);
  $c3 = ImageColorAllocate($p, 30, 30, 30 + rand(1,120));
  $c4 = ImageColorAllocate($p, 30 + rand(1,120), 30, 30 + rand(1,120));
  $c5 = ImageColorAllocate($p, 30 + rand(1,120), 30 + rand(1,120), 30);
  
  // Die 5 Captcha Lettern ausgeben...
  ImageString($p, rand(2,5), 10  + rand(1,14), rand(1,12), $_SESSION["code"][0], $c1);
  ImageString($p, rand(2,5), 35  + rand(1,14), rand(1,12), $_SESSION["code"][1], $c2);
  ImageString($p, rand(2,5), 60  + rand(1,14), rand(1,12), $_SESSION["code"][2], $c3);
  ImageString($p, rand(2,5), 85  + rand(1,14), rand(1,12), $_SESSION["code"][3], $c4);
  ImageString($p, rand(2,5), 110 + rand(1,14), rand(1,12), $_SESSION["code"][4], $c5);
  
  // Image ausgeben...
  header ("Content-type: image/png");
  ImagePNG($p);
?>
 
Zurück