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 maxlength festgelegt

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 $_GET bzw. $_POST
  • Jede Variable sollte vor der Benutzung initialisiert werden
    Warnung aktivieren: error_reporting(E_ALL);

Copyright © 2025 Thomas Smits