Eingabe sicherheitshalber in HTML konvertieren

chris4712

Erfahrenes Mitglied
Hallo!

Neulich war an unserer FH ein Vortrag von Uwe Baumann (www.uwebaumann.de / Sicherheitsberater bei MS).

Er hat uns geraten eingaben die ein User per Eingabefeld machen kann nicht direkt in eine MySQL Abfrage einzubinden.

Es gäbe einen PHP Befehl der alle Sonderzeichen automatisch in HTML Code umwandelt. Er hat ihn uns auch genannt, hab ihn aber leider vergessen. Wer kann mir helfen?

Schon mal herzlichsten Dank!

Christian
 
Hallo nochmal,

auch strip_tags() sollte zusätzlich (vorher) angewendet werden.
nl2br() wäre für die anzeige nach der speicherung mit sicherheit auch die wahl der quahl (oder so ähnlich :) )
 
Wie kommt der Mann denn darauf, dass die Zeichen in HTML-Code umgewandelt werden sollen? Hat er dazu einen konkreteren Grund genannt, als allgemein die Sicherheit?
In erster Linie sollten meines erachtens die Zeichen beachtet werden, die zu SQL-Injection führen können. Dabei ist zu beachten, dass (nur eine Auswahl)
  • Anführungszeichen einen Char beenden können und somit mit einem Backslash escaped sein müssen
  • der Backslash selbst escaped werden sollte
  • Zahlen wirklich Zahlen sind
Mit Sonderzeichen, wie ä, ö, ü, <, >, etc. sehe ich keine besonderen Probleme.

Für MySQL gibt es zum escapen in PHP die Funktion [phpf]mysql_real_escape_string[/phpf], die i.V.m. [phpf]strip_slashes[/phpf] unter Beachtung von [phpf]get_magic_quotes_gpc[/phpf] gegen SQL-Injection arbeitet.

Würde mich freuen, wenn Du nähere Gründe zu der Aussage nennen kannst.

Gruß hpvw

PS: Hat jemand ein vernünftiges deutsches Wort für escapen (, außer "flüchten")?
 
PS: Hat jemand ein vernünftiges deutsches Wort für escapen (, außer "flüchten")?
Maskieren vielleicht? Was schlaueres fällt mir grad auch nicht ein …

PS: Was heisst denn i.V.m.? :confused:

Ich tendiere statt zur Verwendung von mehreren verwirrenden Teilfunktionen auch ganz klar zur Verwendung von [phpf]mysql_real_escape_string[/phpf].
 
Hallo!

Er hatte als Beispiel einen OnlineShop erstellt. In diesen waren diverse Sicherheitslücken extra eingebaut.

Z.B. hat er ein Loginformular gehabt. In diese hat er einfach eine MySQL Abfrage eingegeben, und schon wurden alle Benutzerdaten ausgegeben.

Oder: Eine einfach "Wer ist Online" Liste. Dann einfach statt eines Namens ein JavaScript Befehl eingegeben, und schon wurde die Seite entführt.

Usw.

Gruß

Christian
 
@SilentWarrior
i.V.m. = "in Verbindung mit"
Ich habe die Abkürzung schon so oft gesehen, dass ich dachte, sie wäre allgemein bekannt, sorry.

Dass bei Verwendung von [phpf]mysql_real_escape_string[/phpf] zunächst [phpf]stripslashes[/phpf] angewendet werden sollte wenn [phpf]get_magic_quotes_gpc()[/phpf] true ergibt, ist Folgender:
Ist diese Servereinstellung an, werden automatisch die entsprechenden Zeichen in Usereingaben maskiert. Dies wird mit [phpf]stripslashes[/phpf] zunächst zurückgenommen, damit [phpf]mysql_real_escape_string[/phpf] genau die Zeichen maskieren kann, die bei der konkreten Datenbankverbindung für ein sicheres Query maskiert werden müssen.

@chris4712
Aha, danke, wieder was gelernt. Dann entstehen durch die HTML-Zeichen also keine Sicherheitslücken bezüglich der Datenbank, sondern bei der anschließenden Ausgabe der Daten in der HTML-Seite. Das Einschleusen eines Querys bei der Formulareingabe ist dann wieder die "klassische" SQL-Injection, von der ich ausgegangen bin. Gegen die hilft die angesprochene Maskierung.

Gruß hpvw

PS: Maskieren klingt schon mal besser, hoffentlich ist die Bedeutung auch dieselbe.
 
Zurück