Sven Rautenberg: mysql_real_escape_string und md5 (PHP)

Beitrag lesen

Moin!

kurze Verständnisfrage:
Bei einer Datenbankanfrage wie passwort='".mysql_real_escape_string(md5($_POST['passwort']))."'
Kann auf das mysql_real_escape_string verzichtet werden, oder?

Man will nicht darauf verzichten, weil der Anblick einer Escape-Funktion einem auf den ersten Blick das Sicherheitsgefühl gibt, dass an dieser Stelle keine SQL-Injection stattfinden kann.

So ein pauschales Escaping ist viel sicherer, als wenn man sich erst im Detail überlegen muss, ob die Funktionsergebnisse von z.B. md5() in absolut jeder Situation wirklich garantiert SQL-ungefährliche Strings zurückliefern.

Stell dir einfach mal vor, im weiteren Leben der Software wird irgendwann die Funktion md5() ersetzt durch eine ganz ähnliche, aber eigene Funktion, die das Passwort verschlüsselt, z.B. hash_mich().

Und die Funktion wird dann in weiteren Entwicklungsschritten nochmal umgebaut, und durch einen dummen Fehler kommt irgendwann doch mal der String wieder im Klartext heraus, ist also dann sql-gefährlich.

Warum sollte man sich als Entwickler jetzt beim Zusammenbau des SQL auf irgendeine Diskussion einlassen wollen, ob, wann und warum die aufgerufene Funktion sichere und unsichere Strings zurückliefert? Hier pauschal Escaping anzuwenden wird NIEMALS zu Sicherheitslücken führen. Hier pauschal aus falsch verstandener Effektivitätsüberlegung auf Escaping zu verzichten wird POTENTIELL IRGENDWANN zu Problemen führen.

Als sicherheitsinteressierter Entwickler wähle ich immer die Methode, die mir NIEMALS Probleme machen wird.

- Sven Rautenberg