Felix Riesterer: Gestäbuch absicher UND Affenformular

Beitrag lesen

Lieber Malcolm,

1. Du startest eine Session.
2. In dieser Session hast Du eventuell schon Werte drin (wenn ein Besucher z.B. etwas abschickt, dann hat er vorher das Formular abgeholt und Cookie bekommen)
    - wenn schon vorhanden, dann übernehmen, falls nicht, neu anlegen:
      ~~~php $_SESSION['schloss'] = $zufallswert1;
      $_SESSION['schluessel'] = $zufallswert2;

3\. Du überprüfst, ob bestimmte $\_POST-Indices (z.B. `]$_POST['aktion'] == "auswerten"`{:.language-php}) vorhanden sind, falls ja -> Auswerten, falls nein -> Formular neu erstellen und ausgeben  
  
4a. (neues Formular):  
    - neue Zufallswerte anlegen (für Schloss und Schlüssel)  
    - ein hidden-Feld erstellen, dessen name-Attribut den "Schloss"-Wert, und dessen value-Attribut den "Schlüssel"-Wert erhält  
    - ein spezielles hidden-Feld, an dem unser Script erkennt, dass ein Formular ausgewertet werden soll (z.B. `<input name="aktion" value="auswerten" type="hidden" />`{:.language-html} (da könnte man aber auch den submit-Button nutzen, dem man das name-Attribut entsprechend verpasst, allerdings ist das dann mit dem value-Prüfen so eine Sache...)  
  
4b.(Auswertung)  
    - Die Session kennt ja `$_SESSION['schloss'] und $_SESSION['schluessel']`{:.language-php}, also wird geprüft:  
      `isset($_POST[$_SESSION['schloss']]) && $_POST[$_SESSION['schloss']] == $_SESSION['schluessel']`{:.language-php}  
    - Wenn obige Prüfung scheitert, dann wird 4a ausgeführt, und bereits eingegebene Userdaten im Formular voreingetragen.  
  
Zusätzlich kann man ein Texteingabefeld mit einem "verräterischen" name-Attribut ins Formular aufnehmen, zu dem man schreibt, dass der User es leer lassen soll, um alles mit CSS dann aus dem sichtbaren Bereich zu "verschieben". Bots tragen etwas ein, Menschen nicht.  
  
Prinzip klarer geworden? Näheres findest Du in meinem GB-SCript.  
  
Liebe Grüße,  
  
Felix Riesterer.

-- 
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)