hotti: SPAM-Protektion

Beitrag lesen

Hallo,

Beim normalen Aufruf wird eine "mailid" zufällig erzeugt und in einem hidden-Field gespeichert. Den Sinn von dem cleanup-Befehl hab ich noch nicht ganz verstanden (macht wahrscheinlich irgendetwas auf dem Server). Dann wird erneut ein AJAX-Request abgesetzt, diesmal mit der mailid als Parameter. Die Ausführung wird auf dem Server um 5 Sekunden verzögert, dann ein Cookie gesetzt. Ich nehme an, dass dabei auch die mailid auf dem Server als gültig gespeichert wird (nach den 5 Sekunden).

Nur wenn hidden-Field und Cookie übereinstimmen und (sofern ich richtig liege) die id als gültig gilt, wird das Formular durchgelassen.

Hohohhooooo ;-)

Du hast es *G*

Aufbauend auf meinen Artikel wirken hier Cookies und Ajax wie folgt zusammen:

  • beim GET auf das Form sendet das CGI einen Sessionkey in das hiddenField "mailid",
  • Ajax sendet diesen value zurück an den Server, dort wird eine DB beschrieben und nach 5 Sec. kommt die Rsponse zurück, und es wird ein Cookie gesetzt mit dem value der mailid,
  • Diese Response gibt den Button "Mail senden" frei, der Benutzer sieht, dass er die Mail senden kann.

Beim Senden prüft das CGI drei Dinge:

  
 if(!$mailid ){ # in DB!?  
  redir("$ENV{SCRIPT_NAME}?drop=1");  
 }  
 elsif( ($newtime - $timestamp) < $delay ){  
  redir("$ENV{SCRIPT_NAME}?drop=1");  
 }  
 elsif( $mailcookie ne $sessionkey ){  
  redir("$ENV{SCRIPT_NAME}?drop=1");  
 }  
 else{  
  $dbh->do("DELETE FROM spamprot WHERE sessionkey='$sessionkey'");  
  # Mail versenden mit Net::SMTP;  
  #mail($mailhost, $to, $subject, $mesg, $from, '');  
  redir("$ENV{SCRIPT_NAME}?success=1");  
 }  

Ähhm, es gibt noch eine vierte Bedingung, aber die hab ich mir nicht selbst ausgedacht und die lassen wir mal weg.

Ein Bot, der dieses Formular automatisieren will, muss also folgendes tun:

1. GET auf das Script ohne Parameter um die sessionid zu bekommen,
2. 5 Sekunden warten (!),
3. POST mit der 'sessionid' im Cookie.

(3.) geht nur einmal.

Viele Grüße,
Hotte