Bei PHP ist es immer dann Kritisch sobald Benutzereingaben
erfolgen.
Durch SQL injection & co sind die meisten Entwickler schon
aufmerksam wenn Sie Benutzereingaben an eine Datenbank
weiterreichen. Leider setzt diese Aufmerksamkeit häufig aus
sobald die Daten nicht an die Datenbank sondern nur auf dem
Bildschirm wieder ausgegeben werden.
Als Beispiel nehmen wir hier mal ein Suchformular, wie bei google.
Bei einem Fehler, oder wenn das Skript nichts findet wird der
Suchstring wieder in das Suchformular eingesetzt und der
Benutzer sieht wieder das Suchformular mit seinem Suchwort im
Suchfeld. ( Download Beispielskript)
Genau in diesem Szenario sind viele noch zu Leichtsinnig. Ja die Daten
machen nichts am Server und Datenbank. Aber der Benutzer kann
hier Opfer einer XSS (Cross Site Scripting) Attacke werden.
Wenn die Benutzereingabe wie so oft nur schlecht oder garnicht geschützt
werden.
Sich nur auf das Modul Magic Quotes von PHP zu verlassen, sofern aktiviert,
reicht leider nicht aus. Es entfernt oder besser es escaped zwar ", ' \ und NULL
charactäre. Es macht den HTML Sonderzeichen aber nichts. Also
<, >
Mit diesen kann ich ebenfalls den input tag beenden. Aber alles nacheinander.
Hier stelle ich nun 2 Beispielhafte Formularverarbeitungen mit PHP vor.
Es soll dabei lediglich um die Benutzereingabe gehen und wie man sich am einfachsten und doch effektiv vor XSS Schützen kann.
Als erstes mal die Schlechte Verarbeitungsmethode:
$textinBoxU = $_GET['Text'];
Nur eine Zuweisung vom übergebenen Text. Ohne jede Überprüfung.
Dabei wäre der es besser folgendes in den Code zu schreiben:
$textinBoxU = htmlspecialchars($_GET['Text'] , ENT_QUOTES);
So damit wäre das Skript vor einem XSS Angriff relativ sicher. Ganz sicher ist
man ja nie, wer weiß was noch kommt.
Mit htmlspecialchars werden alle HTML Sonderzeichen in HTML-Code um.
Hier eine kleine gegenüberstellung. Oben die HTML Sonderzeichen und unten im HTML-Code damit jeder weiß was gemeint ist. Durch die Optionale Angabe von quote_style "ENT_QUOTES" gebe ich an dass auch das einfache Anführungszeichen
umgewandelt wird.
> < " '
erfolgen.
Durch SQL injection & co sind die meisten Entwickler schon
aufmerksam wenn Sie Benutzereingaben an eine Datenbank
weiterreichen. Leider setzt diese Aufmerksamkeit häufig aus
sobald die Daten nicht an die Datenbank sondern nur auf dem
Bildschirm wieder ausgegeben werden.
Als Beispiel nehmen wir hier mal ein Suchformular, wie bei google.
Bei einem Fehler, oder wenn das Skript nichts findet wird der
Suchstring wieder in das Suchformular eingesetzt und der
Benutzer sieht wieder das Suchformular mit seinem Suchwort im
Suchfeld. ( Download Beispielskript)
Genau in diesem Szenario sind viele noch zu Leichtsinnig. Ja die Daten
machen nichts am Server und Datenbank. Aber der Benutzer kann
hier Opfer einer XSS (Cross Site Scripting) Attacke werden.
Wenn die Benutzereingabe wie so oft nur schlecht oder garnicht geschützt
werden.
Sich nur auf das Modul Magic Quotes von PHP zu verlassen, sofern aktiviert,
reicht leider nicht aus. Es entfernt oder besser es escaped zwar ", ' \ und NULL
charactäre. Es macht den HTML Sonderzeichen aber nichts. Also
<, >
Mit diesen kann ich ebenfalls den input tag beenden. Aber alles nacheinander.
Hier stelle ich nun 2 Beispielhafte Formularverarbeitungen mit PHP vor.
Es soll dabei lediglich um die Benutzereingabe gehen und wie man sich am einfachsten und doch effektiv vor XSS Schützen kann.
Als erstes mal die Schlechte Verarbeitungsmethode:
$textinBoxU = $_GET['Text'];
Nur eine Zuweisung vom übergebenen Text. Ohne jede Überprüfung.
Dabei wäre der es besser folgendes in den Code zu schreiben:
$textinBoxU = htmlspecialchars($_GET['Text'] , ENT_QUOTES);
So damit wäre das Skript vor einem XSS Angriff relativ sicher. Ganz sicher ist
man ja nie, wer weiß was noch kommt.
Mit htmlspecialchars werden alle HTML Sonderzeichen in HTML-Code um.
Hier eine kleine gegenüberstellung. Oben die HTML Sonderzeichen und unten im HTML-Code damit jeder weiß was gemeint ist. Durch die Optionale Angabe von quote_style "ENT_QUOTES" gebe ich an dass auch das einfache Anführungszeichen
umgewandelt wird.
> < " '
> < " '
Ich habe hier noch ein kleines Beispielformular mit PHP Code um eigene
Experimente zu machen und vor allem um den Unterschied nochmals
aufzuzeigen. Also zwischen unsicher und sicher. Also dann auf gutes
Programmieren und vor allem auf sichereres Programmieren.
Weiterführende Links:
PHP Magic Quotes Modul, ab Version 6 ist es weg
PHP htmlspecialchars auf php.net
PHP htmlentities auf php.net
Die Downloads hier in meinem Blog laufen alle über den RapidShare Server.
Um die Daten herunterzuladen muss nichts bezahlt werden und man muss sich
auch nirgends Anmelden. Das hat den Sinn dass ich mir hier die Arbeit Spare ;-)
Kommentare