Der Martin: Formulareingabe sicher machen

Beitrag lesen

Hi,

Ich habe ein Eingabeformular, dessen Inhalt ich auf gewisse Zeichen beschränke, um möglichem Hacking vorzubeugen.

das ist als erste Stufe okay, aber gegen Hacker vergebliche Liebesmüh.

Die Überprüfung des Inhalts erfolgt naturgemäß via Javascript, daher wird die durchzuführende Aktion des Formulars erst ausgelöst, nachdem der Inhalt auf seine Zulässigkeit hin überprüft wurde.

Was aber, wenn nun Javascript im Browser des Endbenutzers nicht aktiviert ist? Das Formular lässt sich mit ENTER immer noch auslösen, lässt aber nun keine Prüfung des Inhalts mehr zu!

Grundsätzlich sollte eine Seite auch ohne Javascript zumindest nutzbar sein, wenn auch vielleicht mit Komfort-Einbußen. Es ist also völlig okay, wenn das Formular so auch abgeschickt werden kann. Und das ist auch der Punkt, den ich im vorherigen Absatz schon angedeutet habe: Die Überprüfung mit Javascript kann nur eine Vorstufe sein, die den Vorzug bietet, dass ein fehlerhaft ausgefülltes Formular nicht erst abgeschickt werden muss, um den Fehler festzustellen.

Die eigentliche Überprüfung muss daher auf dem Server stattfinden, an den die Formulardaten gesendet werden. Bedenke, dass auch ohne dein Formular formal korrekte Formulardaten gesendet werden könnten, etwa mit Tools wie wget oder curl. Oder indem jemand eine manipulierte Form des Formulars einfach nachbaut.

Option 1: ich könnte die gesamte Seite "verstecken" (display:none;) und mit Javascript erst anzeigen.

Option 2: ich könnte <noscript> mit einer Weiterleitung versehen.

Also die Wahl zwischen Galgen und Guillotine gegen Kopfschmerzen.

Beide Optionen erscheinen mir aber alles andere als sicher, da es

  1. durchaus möglich ist, eine Seite ohne deren style-Attribute anzuzeigen und
  2. auch eine Weiterleitung vor deren Durchführung "abgefangen" werden kann.

Plus die schon erwähnte Möglichkeit, dass ein Datensatz komplett ohne Verwendung deines Formulars generiert und gesendet wird.

Wie schütze ich mein Eingabeformular also auch bei deaktiviertem Javascript vor "falschen" Eingaben?

Indem PHP die ankommenden Eingabedaten prüft, die zwar im Friedensfall schon okay sein sollten, aber auch beliebig fehlerhaft. In dem Fall musst du dich entscheiden, ob du einfach wieder das Formular anzeigst (-> Affenformular), oder einfach eine Fehlerseite, oder etwas ganz anderes.

So long,
 Martin

--
Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
- Douglas Adams, The Hitchhiker's Guide To The Galaxy