Formularsicherheit
Datenübertragung mit GET
Formulare können Daten per GET übertragen
- Daten werden sichtbar in der URL übertragen
http://web/sec/formular.php?nachname=Smits&vorname=Thomas - Parameter und Werte können ohne Tools verändert werden
- unerwartete Parameter (fehlende oder zusätzliche)
- unerwartete Werte
<form action="formular.php" method="GET">
Nachname: <input type="text" name="nachname"/><br/>
Vorname: <input type="text" name="vorname"/><br/>
<input type="submit" name="Absenden"/>
</form>
Datenübertragung mit POST
Formulare können Daten per POST übertragen
- Parameter werden im Request-Body übertragen
- Formularfelder sind über den HTML-Code zugänglich
- Werte und Parameter können manipuliert werden
- durch Änderungen am Formular oder spezielle Tools (z. B. Tamper Data für Firefox)
- unerwartete Parameter (fehlende oder zusätzliche)
- unerwartete Werte
<form action="formular.php" method="POST">
Nachname: <input type="text" name="nachname"/><br/>
Vorname: <input type="text" name="vorname"/><br/>
<input type="submit" name="Absenden"/>
</form>
Daten aus Formularen
Daten vom Browser können manipuliert sein
- müssen nicht dem erwarteten Format entsprechen
- Parameter können fehlen
- andere Parameter können auftauchen
- Parameter enthält Sonderzeichen
- alle Daten müssen auf dem Server noch einmal strengstens kontrolliert werden
- Parameter-Namen
- Länge
- Format
Falsche Annahmen
Folgende Annahmen sind alle falsch
- Daten sind entsprechend dem HTTP-Standard codiert
- Daten passen in den Speicher
- Parameter gehören zu einem entsprechenden Formularfeld
- Wert einer Auswahlliste ist einer der Listeneinträge
- Eingabefeld sendet nicht mehr Zeichen als in
maxlengthfestgelegt - …
Blacklist vs. Whitelist
Zwei Ansätze zur Validierung von Daten
- Blacklist – enthält alle verbotenen Zeichen und Formate
- Whitelist – enthält alle erlaubten Zeichen und Formate
Frage
- Welchen Ansatz würden Sie vorziehen?
- Warum würden Sie ihm den Vorzug geben?
Zusätzliche Formularparameter
Ältere PHP-Versionen (< 5.4) können Formular-Parameter als globale Variable bereitstellen
- Angreifer kann hierdurch Variablen initialisieren und injizieren
- Feature auf keinen Fall nutzen, sondern abschalten
- Zugriff auf Formularparameter per
$_GETbzw.$_POST - Jede Variable sollte vor der Benutzung initialisiert werden
Warnung aktivieren:error_reporting(E_ALL);