MB Dev .tech
Registrieren Login

Forms · Sanitizing vs Escaping

← Zurück zu Forms, Requests & State

Diese beiden Begriffe werden extrem oft verwechselt: Sanitizing (Eingaben „aufräumen“) und Escaping (Ausgaben sicher machen). Beides ist wichtig – aber es sind zwei unterschiedliche Aufgaben.

Merke
Sanitizing = Input vorbereiten · Escaping = Output sicher ausgeben

Du kannst Eingaben noch so sehr „säubern“ – wenn du später unescaped in HTML ausgibst, kannst du trotzdem Probleme bekommen.

1) Sanitizing (Input „aufräumen“)

Sanitizing bedeutet: Du nimmst Eingaben und bringst sie in eine Form, mit der dein Programm gut arbeiten kann. Das hat oft mit Format und Konsistenz zu tun.

  • Leerzeichen am Anfang/Ende entfernen (trim)
  • Mehrfach-Leerzeichen reduzieren
  • Zeichen filtern (nur bestimmte Zeichen erlauben)
  • Groß-/Kleinschreibung vereinheitlichen
Tipp
Sanitizing ist häufig „Business-Regel“

Beispiel: Du willst bei einem Gutscheincode nur Großbuchstaben speichern, damit Vergleiche einfacher werden.

2) Escaping (Output sicher machen)

Escaping bedeutet: Bevor du Text in ein bestimmtes Ziel ausgibst, wandelst du „kritische Zeichen“ so um, dass sie dort keine Sonderbedeutung mehr haben.

Merke
Escaping hängt vom Kontext ab

HTML-Escaping ist etwas anderes als SQL-Escaping oder JavaScript-Escaping. In HTML willst du z.B. < und > entschärfen.

Achtung
„Ich sanitize – also brauche ich kein escaping“ ist ein Klassiker

Das ist gefährlich. Sanitizing kann helfen, aber sicheres Ausgeben in HTML (escaping) ist trotzdem Pflicht.

Beispiel: HTML-Escaping

$input = '<script>alert("Hi")</script>';

// Wenn du das unescaped ausgibst, könnte der Browser es als Code interpretieren.
// Darum escapen, z.B. mit htmlspecialchars(...).

3) Mini-Demo: Unterschied „sehen“

Gib hier irgendeinen Text ein (auch Sonderzeichen) und schau dir an, wie er „roh“, „sanitized“ und „escaped“ aussieht. Das hilft, den Unterschied wirklich zu verstehen.

Tipp: Teste auch mal diesen Beispiel-Text: <script>alert("Hi")</script>
Zurücksetzen

Ergebnis

Roh
So kommt es vom Nutzer (Input)

Hinweis: Wir zeigen es hier im Code-Block bereits escaped an, damit die Seite nicht kaputt geht. „Roh ausgeben“ wäre in HTML riskant.

Sanitized
Input aufgeräumt (Format/Konsistenz)

Hier haben wir z.B. Leerzeichen normalisiert und „ungewöhnliche“ Zeichen entfernt. Das ist ein Beispiel – in echten Projekten hängt das von deinen Regeln ab.

Escaped
Sicher für HTML-Ausgabe

Raw escaped:
Sanitized escaped:

Escaping sorgt dafür, dass z.B. < nicht als HTML-Tag startet, sondern als normales Zeichen angezeigt wird.

4) Faustregeln für Einsteiger

  • Validieren: Ist die Eingabe erlaubt und sinnvoll?
  • Sanitizen: Bringe die Eingabe in ein sauberes Format, das du erwartest.
  • Escapen: Bevor du etwas ausgibst, mache es für den Kontext sicher.
Achtung
„Datenbank = sicher“ ist auch ein Mythos

Nur weil etwas gespeichert ist, heißt es nicht, dass es sicher ist. Wenn du es später in HTML ausgibst, musst du wieder escapen.

Nächster Schritt
Sessions & Cookies

Jetzt schauen wir uns an, wie Webseiten sich etwas „merken“ können – obwohl HTTP eigentlich zustandslos ist.