Sven Rautenberg: PHP: Wie schützt man sich vor unerwartetem $_POST im Formular

Beitrag lesen

Moin!

ich habe mir überlegt, dass ja jemand ein Formular erstellen könnte, das als action= meine .php Seite angibt und meinen  Auswertungsmechanismus mit unerwarteten $_POST's manipulieren könnte. Nun meine Frage ist recht simpel: gibt es wirksame Methoden, sich gegen soetwas zu schützen, ausser den $_POST mühsam zu überprüfen und das ganze dann abzubrechen, wenn nicht erwartetes ankommt?

Jeder Request kommt für den Webserver und dessen Skripte "unerwartet", weil HTTP keinerlei Zustandsbehaftung hat. Jeder Request steht für sich alleine, es gibt kein "vorher war aber..." und kein "hinterher muss noch...".

Von dieser Feststellung ausgehend ist die Überlegung also folgende: Wenn die in $_POST gesendeten Daten zu einer sinnvolle Aktion des Skripts führen können, dann gibts keinen Weg, das abzubrechen oder zu vereiteln, weil ja genau dafür das Skript da ist.

Die einzige Chance liegt darin, die Anforderungen an "sinnvolle Daten in $_POST" bzw. generell in allen beim Request mitgesendeten Informationen so stringent zu formulieren, dass nur noch die gewünschte Untermenge aller denkbaren Requests durchkommt, die man haben will.

Das Problem dabei ist: Alle Informationen, die ein Formular-Ausgabe-Skript vorher versteckt in das Formular hineintut, sind öffentlich abrufbar - also kann das POST-manipulierende Skript diese Informationen abfragen und wieder zurücksenden. Das gilt auch für jede Art von Session-Mechanismus. Einzig ein Passwortschutz wäre eine einigermaßen wirksame Hürde, sofern man nicht automatisiert an neu generierte Accounts kommt.

Damit das so automatisch generiert nicht mehr funktioniert, gibt es CAPTCHA. Diese Tests, meist in Form irgendwelcher verzerrten Textbildchen, deren Buchstaben wieder einzutippen sind, sollen die heutigen Bildtexterkennungen überfordern, aber von Menschen leicht lösbar sein.

Das ist dummerweise ein Zielkonflikt. Die Textbilder sind oftmals auch für normalsichtige Menschen kaum lösbar, für Menschen ohne normale Augenfunktion erst recht nicht. Hingegen sind schlechte CAPTCHA-Bilder sehr wohl automatisiert von Programmen lösbar, oder man setzt als Automatisierer einfach menschliche Rechenpower ein, indem man das CAPTCHA-Bild einfach auf einer ganz anderen Seite anzeigt, die unter dem Mott läuft: "Lös mir das CAPTCHA, und ich zeig' dir pr0n!".

Irgendwo auf der Skala von "automatisiert nutzbar" bis "auch durch Menschen nicht mehr nutzbar" rangiert jedes Formular. Die Frage ist jeweils: Welchen Nutzen kann man daraus ziehen, was kann man gewinnen, wenn man das Formular evtl. massenhaft oder manipuliert an den Server zurückschickt?

Das Ziel einer vernünftigen Skriptprogrammierung sollte also sein, den anrichtbaren Schaden gering zu halten, bzw. bei abnormer Nutzung in irgendeiner Weise ein Alarmsignal an den Admin zu senden.

- Sven Rautenberg