Formulare angreifen und absichern · Skriptum 03
XSS-Attacken verstehen
Du erkennst, wie Attacken durch HTML-Eingaben funktionieren
htmlspecialchars() einsetzen
Du kannst gefaehrliche HTML-Zeichen neutralisieren
Sicherheit im Web
Du weisst, wie man Formularfelder absichert
XSS entsteht, wenn eine Webseite Benutzereingaben ungefiltert ausgibt. Ein Angreifer kann dann HTML- oder JavaScript-Code einschleusen, der im Browser anderer Benutzer ausgeführt wird – z. B. um Cookies zu stehlen, Formulare zu manipulieren oder Nutzer weiterzuleiten.
Schnell ausprobieren:
<script>alert()</script> nicht?
Das ist kein Zufall – und auch kein Schutz! Moderne Browser führen <script>-Tags, die per innerHTML nachträglich in die Seite eingefügt werden, aus Sicherheitsgründen absichtlich nicht aus.
Das macht <script>-Filterung aber nicht ausreichend – denn Angreifer wechseln einfach die Methode:
<img src=x onerror="alert()"> → Event-Handler werden immer ausgeführt<a href="javascript:alert()"> → JavaScript-URLs funktionieren beim Klick👉 Deshalb reicht es nicht, nur nach <script> zu filtern – htmlspecialchars() muss alle Sonderzeichen escapen.
Ausgabe im Browser:
Ausgabe im Browser:
Was htmlspecialchars() im Hintergrund macht:
Tags werden als Text angezeigt, nicht als HTML interpretiert.
Normalen Text ausprobieren
Gib Hallo Welt! ein und klicke „Abschicken". Was ist der Unterschied zwischen den beiden Ausgabe-Boxen?
HTML-Injektion testen
Klicke auf den Button „<b>HTML-Injektion". Was passiert in der unsicheren Box? Was in der sicheren? Erkläre den Unterschied in einem Satz.
Der echte Angriff
Klicke auf „💀 XSS-Angriff (alert)". Was erscheint in der unsicheren Box? Warum ist das in einer echten Webanwendung gefährlich? Beantworte: Was könnte ein Angreifer anstelle von alert() tun?
alert('...') durch document.cookie — damit könnte ein Angreifer den Session-Cookie des Opfers auslesen und den Login übernehmen.
Eigenen Payload erfinden
Schreibe selbst einen Eingabe-String mit HTML, der in der unsicheren Box visuell auffällig ist (z. B. roten Text, ein Bild, einen Button), in der sicheren Box aber harmlos als Text erscheint.
Kopiere den folgenden Code in eine neue Datei xss_test.php in deinem
htdocs/-Ordner und öffne sie unter
http://localhost/xss_test.php.
Das Formular hat ein Textfeld und Radio-Buttons – beide Felder können unsicher ausgegeben werden.
Probiere es aus
Wähle den Radio-Button „⚠️ Gefährlicher Wert" und schicke das Formular ab. Schau was in der unsicheren vs. sicheren Ausgabe passiert – und teste gleichzeitig im Textfeld den <img src=x onerror="alert('XSS!')">-Payload.
Goldene Regel der Webentwicklung
Vertraue niemals Benutzereingaben.
Alles, was von außen kommt, muss vor der Ausgabe mit
htmlspecialchars()
escaped werden.