O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

854.5 Formularvervollständigung verhindern
Eine weitere Gefahr für Nutzer des Internet Explorer geht von des-
sen Fähigkeit aus, den Inhalt der Zwischenablage auszulesen. Mit
wenigen Zeilen JavaScript kann so ein Seitenbetreiber jederzeit die
komplette Zwischenablage einsehen, die auch vertrauliche Texte bein-
halten könnte. Diese von Microsoft als »Feature« bezeichnete Funk-
tion lässt sich in den Sicherheitseinstellungen des Browsers abschalten.
4.5 Formularvervollständigung verhindern
Speichern Benutzer Ihrer Anwendungen Login-Daten in einem Pass-
wort-Safe, so können Angreifer, die den vorigen Abschnitt dieses Kapi-
tels sorgfältig gelesen und eine XSS-Lücke in Ihrem Skript gefunden
haben, mit Leichtigkeit diese Benutzerdaten abschöpfen, ohne dass
Ihre Kunden sich einloggen müssen. Ein simpler Klick an der falschen
Stelle oder ein Besuch im falschen Forum (das nämlich per CSRF prä-
pariert wurde) reichen aus.
Die einzige Möglichkeit, diese Datenspeicherung durch den Brow-
ser zu verhindern, besteht darin, die Formularfelder für Benutzername
und Passwort (oder die entsprechenden Formularfelder in Ihrem Sys-
tem) mit dynamischen, sich bei jedem Request ändernden Namen zu
versehen. Mit dieser Methode – die wohldosiert auch an anderen sen-
siblen Stellen in Ihrem Kundenbereich eingesetzt werden kann – ver-
hindern Sie im gleichen Schritt auch zuverlässig einfache GET-basierte
CSRF-Angriffe.
Eingabefelder als
Array-Variablen
Die Implementierung sieht folgendermaßen aus: Statt einer norma-
len Stringvariablen deklarieren Sie Benutzername und Passwort als
einelementige Arrays – der Array-Schlüssel ist ein zufällig generierter
Hash. Statt eines Arrays können Sie auch einen konkatenierten String
verwenden, die Idee hinter dem Verfahren erschließt sich jedoch bei
Benutzung eines Arrays am einfachsten.
<form>
<?php
$key = md5(rand(0,99999));
?>
<input type="text" name="username[<?php echo $key; ?>]">
<input type="password" name="pw[<?php echo $key; ?>]">
<input type="hidden" name="key" value="<?php echo $key; ?>">
<input type="submit">
</form>
Formular mit dynamisch
benannten
Eingabefeldern
Da die Speicherfunktion für Benutzernamen und Passwörter stets dar-
auf basiert, dieselben Formularfelder wiederzuerkennen, lässt sie sich
mit diesem einfachen Trick überlisten, allerdings nur 99.999 Mal.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required