Peter Strucks: Ist mein Login System sicher genug

Beitrag lesen

Hi.

Connect-Anforderungen können auch dann misslingen, wenn die übergebenen Daten richtig sind. Zum Beispiel dann, wenn der Server grad nicht verfügbar ist. Diesen Fehler solltest du ebenso berücksichtigen wie den Rückgabewert von mysql_select_db().

Hab ich Gefixt.

Vermutlich möchtest du, dass an dieser Stelle das Script nicht weiter verarbeitet wird. Du solltest es definiert beenden.

Hab ich Gefixt.

Das else ist überflüssig, da du auf jeden Fall nur bei einer nicht erfolgreichen Prüfung hier vorbeikommst.

Hab ich Gefixt.

header('Location: index.php?show=blank&action=lfailed&err=nopen');
}

Auch hier fehlt vermutlich wieder ein die() oder exit.

Hab ich Gefixt.

$nick=$_POST['user'];
$pw=$_POST['pw'];

Man kann mit den Werten in $_POST auch direkt weiterarbeiten. Das Anlegen neuer Variablen ist nicht erforderlich.

Ist mir irgendwie übersichtlicher. Oder ändert es viel an der Performance?

Was passiert, wenn ich ' OR 1 OR ' (inklusive der ' ) eingebe? Und wo wird das Passwort überprüft? Auch im weiteren Verlauf kann ich eine Prüfung nicht finden.

Hatte ich vergessen reinzuschreiben:
$nick = preg_replace("![^A-Za-z0-9- ]!is","",$nick);
$pw = preg_replace("![^A-Za-z0-9- ]!is","",$pw);

Was will der Anwender im Fehlerfall mit dem genauen Wortlaut der MySQL-Fehlermeldung? Was hat es für ihn für einen Nutzen, wenn das Script an dieser Stelle stirbt? Den Fehlerfall kann der Anwender auch absichtlich provozieren, indem er etwas eingibt, das zu einem Syntax-Fehler des SQL-Statements führt. Ich sehe keine Gegenmaßnahmen in deinem Script (Stichwort mysql_real_escape_string())

Hmm.. okay.. aber das mit dem mysql_real_escape_string() verstehe ich nicht ganz obwohl ich mir dazu das Manual durchgelesen habe.

$row = mysql_fetch_array($num);

Was ist, wenn bei der Abfrage kein Ergebnisdatensatz ermittelt werden konnte?

Hab ich gefixt.

Das ganez Funktioniert. Aber ist es sicher genug?

Sicher gegen:

  • SQL-Injektions
  • Abfangen von Userdaten
  • Fälschung der Session (verdammt wichtig)
      das sich kein Fremder einloggen kann der nicht angemeldet ist.
  • Einschläusung von Code in die Datenbank
  • Einschläusung von Fehlern
  • Bruteforce Attacken

echo "$verabschiedung $name";