Der Martin: Sicherheit: MySql-Injection und Zugriff "von aussen"

Beitrag lesen

Hi,

// Wir haben $_POST['password'] nicht geprueft, es koennte also alles darin
// stehen, was der User will.

und code:
$_POST['password'] = "' OR ''='";

Solche Eingaben erlaube ich ja schon per php-script nicht. Das eingegebene Passwort durchläuft zuerst "ctype_alnum", bei der Registrierung als auch beim Einloggen. Alles, was nicht Buchstabe und Zahl ist, führt zu einer Fehlermeldung. Und Zeichen wie Semikolon, Komma, Leerstellen usw. haben weder in einem Passwort noch in einem Nicknamen was zu suchen.

autsch, böses Foul. Ganz im Gegenteil, es wird häufig *wärmstens empfohlen*, nicht nur Buchstaben und Ziffern[1] im Passwort zu verwenden, sondern eben auch Sonderzeichen, die noch schwerer zu erraten sind.

Im Nicknamen ist lediglich der Unterstrich erlaubt

Auch das ist eine Einschränkung, die ich nicht akzeptieren mag. Damit schließt du Nicks wie "Dr. No" oder "Daddy's Darling" aus, ebenso wie "Hans-Peter". Und das waren jetzt noch nicht mal besonders ausgefallene Beispiele.

in Emails darüber hinaus das Minuszeichen (Bindestrich), Punkt und Klammeraffe. Ich habe noch nie eine Email gesehen die da lautet: vorname,nachname@gmx.de

Das mag selten sein, aber in Mailadressen sind sehr viele Zeichen erlaubt, die du als ungültig abweisen würdest - zumindest im Local-Part. Im Hostnamen ... naja, kommt drauf an, ob man Mailadressen unter IDN-Domains in menschenlesbarer Form notieren möchte, oder Punycode erzwingt.

Jetzt frage ich mich, wozu also zusätzlich mysql_real_escape_string() ?

Um sich diesen Sicherheitsaspekt *anzugewöhnen*, damit man das bei anderer Gelegenheit, wo es eher nötig ist, schon reflexartig einsetzt. Und um Hintertürchen zuzumachen, die man vielleicht trotz aller Prüferei übersehen hat.

Ciao,
 Martin

--
Man ist so alt, wie man sich fühlt.
Aber niemals so wichtig.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(