Absicherung von Webformularen
Schützen Sie öffentlich erreichbare Webformulare gegen sog. CSRF-Angriffe (Cross Site Request Forgery) und „Formular-Spamming“. Dabei senden Programme automatisiert Webformulare ab, um damit unliebsame Aktionen auszulösen, z. B. E-Mails zu senden oder Datenbanken mit sinnlosen Einträgen zu füllen.
Häufig werden zum Schutz sog. Captchas verwendet, die meist jedoch nicht barrierefrei sind. Wir stellen hier einfache Varianten vor, die Sie als Webautor der TU Chemnitz zum Schutz Ihrer Webformulare verwenden können.
Gesicherte Webformulare in 3 Schritten
1. Initialisieren
Hier binden Sie den PHP-Code ein und wählen eine Methode aus.
Wichtig: Unbedingt vor der tucal-Funktion seite()
!
<?php require_once('php/secform.inc'); $secform = new tucal_secform(0); # 0, 1, oder 2 seite(__FILE__);Folgende Schutzmethoden sind derzeit umgesetzt:
- 0 – unsichtbares Token
- 1 – Token und Zeitprüfung – „unsichtbar“
- 2 – Token, Zeitprüfung und JavaScript-Checkbox: Ich bin ein Mensch – sichtbar, JavaScript erforderlich
2. Geheimnis im Formular unterbringen
Geben Sie den HTML-Code, die die PHP-Funktion get_token()
liefert, in Ihrem HTML-Formular aus:
<form action="mod_secform.php" method="post" class="form-horizontal"> ... <?php echo $secform->get_token(); ?> <button type="submit" class="btn btn-default" style="margin:1em">Absenden</button> </div> </form>
3. Prüfen in der Formularauswertung
Verwenden Sie die Funktion check_token(min, max)
,
um die Schutzmethode zu überprüfen. min, max
sind
Zahlenwerte in Sekunden. In diesem Zeitbereich sollte der menschliche
Benutzer das Formular ausfüllen können.
Die Verwendung sehen Sie im Beispiel:
<?php # Auswertung des Formulars # Zeit zum Ausfüllen des Formulars durch den Benutzer - hier: # mindestens 5 Sekunden, maximal 900 Sekunden = 15 Minuten # Verwenden Sie $secform->check_token(0, 0); um die Zeitprüfung abzuschalten list($ok, $reason) = $secform->check_token(5, 900); if ($ok) { # normale Formularauswertung } else { # Fehler, z. B. $reason ausgeben, und/oder einfach Formular nochmal anzeigen echo 'Fehler: ' . htmlspecialchars($reason); }
Beispiele
- Methode 0 – Token: Code – So sieht es aus
- Methode 1 – Token und Zeitprüfung – mind. 5 Sekunden: Code – So sieht es aus
- Methode 2 – Token, Zeitprüfung und JavaScript-Checkbox: Code – So sieht es aus
Antworten auf häufig gestellte Fragen
Sind diese Verfahren wirklich sicher?
Nein, absolut sichere Varianten für öffentlich zugreifbare Formulare – dazu noch barrierefreie – wird es wohl kaum geben. Die umgesetzten Methoden erfordern jedoch ein „menschliches Verhalten“ in einem realen Webbrowser:
- 0 – Das Formular muss vorm Absenden vom Webbrowser geladen werden und kann nicht mehrfach abgesendet werden.
- 1 – Das Formular muss zudem in einem gewissen Zeitraum ausgefüllt und abgesendet werden.
- 2 – JavaScript muss ausgewertet werden (was bei Bots in der Regel nicht der Fall ist). Der Benutzer muss genau eine von zwei Checkboxen anklicken, wobei eine durch CSS gar nicht sichtbar ist.
Letztlich muss die Praxis zeigen, ob wir mit diesen Methoden die „Plagegeister“ abhalten. Sobald diese programmierten Automaten unsere Maßnahmen durchschauen und umgehen, wird der Schutz ausgehebelt. Dann werden wir neue Maßnahmen entwickeln.