php Formular-Sicherung ohne Captcha
php-Skript, auf Java, Perl, Python, Javascript, C etc. übertragbar

Eine verbreitete Form der Website-Belästigung besteht darin, dass die Submit-Skripte von Formularen mit Daten-Aufrufen gespeist werden. Das wird in dem Moment zum Problem, wenn der Angreifer das Submit-Script anstatt vom Formular der Website mit einem eigenen Skript aufrufen kann. Dann kann er Serien von Eingaben absenden, also z.B. 1 oder 10 pro Sekunde.

Um dem vorzubeugen, hat sich das sogenannte 'Captcha' etabliert: Der Besucher muss zusätzlich zu den Formulareingaben eine Buchstaben- oder Zahlenfolge manuell eingeben, welche pro Aufruf des Formulars variiert. Das Submit-Skript kennt das jeweilige Captcha und verweigert die Annahme der abgesandten Daten, wenn das gesandte Captcha nicht stimmt.

Das Captcha ist ein echtes Nervensägenprogramm für Ihre Besucher und ein relativ sicherer Zugangsschutz gegen blinde Menschen. Mein Skript erzielt den gleichen Effekt ohne Captcha, durch den geeigneten Einsatz eines Cookies. Das Prinzip:
  1. Bei Aufruf der Formularseite setzen wir ein Cookie, welches einen Schlüssel als Wert hat
  2. Den Schlüssel setzen wir gleichzeitig als Wert einer versteckten Formularvariablen
  3. Das Submit-Script prüft, ob Cookie und geposteter Schlüssel übereinstimmen
1. Bei Aufruf der Formularseite Schlüssel erzeugen und als temporäres Cookie setzen:
<?php
$cookie_source=md5(uniqid(rand()));
setcookie('cookie_source',$cookie_source);
?>
2. Den Schlüssel setzen wir gleichzeitig als Wert einer versteckten Formularvariablen
<input type="hidden" name="cookie_source" value="<?php echo $cookie_source?>">
3. Im Submit-Script prüfen:
<?php
if($_POST['cookie_source'] != $_COOKIE['cookie_source']) {
	echo "Bitte aktivieren Sie Cookies."; exit;
}
?>
© 2012 Sebastian Heimpel M.A.