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