dedlfix: Session

Beitrag lesen

echo $begrüßung;

Ich hoffe mal sehr, dass du dein Login Script nochmal überdenkst. Als erstes kannst du sowas hier nicht machen:

$username = $_POST['username'];
  $passwort = $_POST['passwort'];
  $server = $_POST['s'];
Du unterziehst die Userdaten keiner Kontrolle. Ein User könnte dir hier alles Mögliche unterjubeln.

Ich vermute stark, EneR und andere Anfänger können sich nicht vorstellen, was unter "alles Mögliche unterjubeln" zu verstehen ist.

Das kann so nicht bleiben, wenn du die Usereingaben nicht überprüfst (mysql_real_escape_string)

$abfrage = "SELECT password FROM usrdata WHERE Usrname LIKE '$username'";

Um dem Verständnis ein wenig auf die Sprünge zu verhelfen, wäre ein kleines Beispiel recht nützlich, z.B. die Eingabe eines Benutzernamens mit einem ' drin. Anschließend vielleicht noch eins, bei dem ein Statement manipuliert wird. Das zeigt, dass das nicht nur ein sicherheitsrelevantes Problem ist, sondern auch in harmlosen Fällen zu Fehlern führt.

$ergebnis = mysql_query($abfrage);

Hier wäre ein Hinweis angebracht, dass mysql_query() im Fehlerfall false zurückliefert. Und dass dieser Zustand nicht berücksichtigt wird, was bei nachfolgenden mysql_*-Funktionen zu Folgefehlern führen kann, weil die eine Ressourcenkennung erwarten und kein false.

Hier hast du eine IF Bedingung. Was würde denn passieren, wenn das Ergebnis NULL ist, also wenn es kein Passwort gibt, weil der Username den man eingeben hat, nicht existiert?
Ganz einfach: Diese Bedingung wäre FALSE, also wird der Code in der Bedingung nicht ausgeführt.

if($row = mysql_fetch_object($ergebnis)) {
      $passwort_sql = $row->password;

Du versuchst auf ein Problem hinzuweisen, bei dem eine nicht in jedem Fall initialisierte Variable entstehen kann, was sich zu einem weiteren Problem entwickeln kann. Doch du beschreibst es etwas verwirrend. mysql_fetch_object() liefert entweder ein Objekt oder false, wenn keine (weiteren) Datensätze mehr verfügbar sind. Es ist zunächst nicht das Problem, dass es kein Passwort gibt, sondern dass die Abfrage eine leere Ergebnismenge geliefert hat. Infolge dessen wird der Ausdruck nicht wahr, und die Variable $passwort_sql wird nicht gesetzt.

Wo entsteht deiner Meinung nach das NULL?

Was heisst das jetzt alles im Klartext?
Ich könnte mich bei deinem Script mit jedem Benutzernamen einloggen. Egal, ob er existiert oder nicht.

Nein, denn wenn er existiert, gibt es einen Datensatz, die "if $row=..."-Bedingung greift, und die Passwortabfrage findet mit dem in der DB eingetragenen Wert statt.

Überprüfe jede Eingabe, die ein User machen kann. Stelle sicher, dass dir niemand irgendwelche Werte in Variablen unterjubeln kann, die du da nicht haben willst.

Das kann man als Lehrsätze so stehen lassen, aber wenn jemand nicht weiß, wie er sie zu verstehen und umzusetzen hat, nützen sie nicht all zu viel.

echo "$verabschiedung $name";