• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Login aber wie?

Es soll folgendes möglich sein:
1. 2 (HTML) Felder um name und PW einzugeben
2. Ein HTML submitbutton
3. Ein PHP script, das auf klick die Felder ausliest
4. Diese mit einer Mysql Datenbank vergleicht (NAME|PW)
5. If Angaben richtig, dann nächste seite ansonsten _PHP_SELF

Wollte nun wissen ob diese schritte vom Sinn her so Korrekt sind?

Ich gebe zu jedem der Punkte meinen Lösungsvorschlag:
1.?
2.?
Code:
3. $HTTP_GET_VARS[form_name], bzw. $HTTP_POST_VARS[form_name]
Code:
4. 
$query = "SELECT benutzername FROM dbbenutzer";
$result = mysql_querry($query);
$datensatz = mysql_fetch_array($result);
foreach ($datensatz as $schlüssel => $wert)
{ if ($HTTP_POST_VARS[form_name] == $wert)
{ echo "name ist ok" 
$namerichtig = true
}
}
Code:
5. If ($namerichtig = true && $pwrichtig = true)
{ header ("location: 2tepage.php")
}

Sry dachte es wäre Privileg ^^
 
Was hindert mich im Browser gleich die 2tepage.php aufzurufen?

Achja: Auch Dir ist es erlaubt die [ code ] Tags zu nutzen!
 
nbkr schrieb:
Was hindert mich im Browser gleich die 2tepage.php aufzurufen?

Es hindert mich mein Gedanke, dass nur Befugte benutzer auf die nächste Seite kommen dürfen und niemand anderes. So wie z.B. beim Login von linux-club

Gibt es noch weitere Risiken?
 
Dein Gedanke in allen Ehren, aber Du hast mich nicht verstanden. Ist ja schön und gut, dass Du auf der ersten Seite die Zugangsdaten prüfst, aber das ist witzlos wenn Du nicht auf der zweiten Seite eine Prüfung einbaust.

Sonst tippt ein Angreifer einfach
http://www.deinedomain.de/2teseite.php

in den Browser und dein Test in der ersten Seite geht ihm zu gut Deutsch am A**** vorbei.

Du musst in die DB schreiben ob der User eingeloggt ist (also ob die Prüfung erfolgreich war) welche SessionID der User hat und wann er das letzte Mal aktiv war. Auf jeder Seite die geschützt werden soll fragst Du die SessionID ab, schaust in der DB nach ob der User mit dieser Session ID eingeloggt ist und ob er nicht zu lange inaktiv war (um zu vermeiden das jemand sich mit einer alten Session ID eines anderen Users einloggt).

Abgesehen davon fehlt deinem Script noch einiges, bzw. ist umständlich geschrieben oder funktioniert einfach nicht.

Du kannst z.B. keine header('Location ...') nutzen wenn Du schon was an den Browser geschickt hast, das tust Du aber mit dem echo.

Warum die Schleife zur Abfrage der Benutzerdaten? Frag einfach direkt danach fragen:
Code:
'SELECT COUNT(*) FROM dbbenutzer WHERE benutzer = '' . mysql_escape_string($_POST['username']) . '' AND password = MD5(\'' . mysql_escape_string($_POST['password']) .  '\')'

Wenn als Ergebnis 1 geliefert wird ist hat der User das passende Passwort geliefert. Wenn nicht ist das Passwort falsch oder den User gibts in der DB nicht. Obs den User gibt oder nicht verät man aber besser nicht. Sonst kann jeder prüfen ob der Nachbar (mit einschlägig bekannten Nick) auch schon einen Account hat.

Die Passwörter parkt man natürlich nicht im Klartext in der DB sondern nur den (MD5)Hashwert davon.
 
Jiha ... genau das Brauchte ich.

Mit "gibt es weitere Risiken?" Meinte ich das mit dem Angreifer und der 2ten seite.

Eins nebenbei:
Ihr habts richtig drauf :wink: ne?
 
Hi,
du brauchst wohl auch noch zwei weitere Felder in deiner Datenbank, damit du einigermaßen sicher gehen kannst, dass der User der grad am Server ist, auch derjenige ist, der sich vorher angemeldet hat.

Sinnvoll ist hier z.B., dass du die IP speicherst und dann auf deiner zweiten Seite eine Abfrage machst: if( IP_von_User == IP_von_Datenbank)

Aber auch das ist noch unsicher! Jetzt könnte z.B. eine ganze Schule, die über einen Router ins Internet geht auf die Seite gelangen, nur wenn sich einer eingelogt hat (nach außen haben ja alle die gleiche IP).

Also solltest du dir mal die Session-Cookies ansehen. Das ist ein für jeden User, der auf deinen Server geht, universeller 32-Zeichen langer Schlüssel, der vom Webserver an den User beim ersten betreten des Servers, gegeben wird.

Wenn du jetzt IP und SessionID beim Login speicherst und danach wieder ausließt, dann kannst du einen Surfer eigentlich eindeutig identifizieren.

Das ganze ist aber immer noch nicht perfekt! Du solltest auch noch einen Timeout einbauen, sodass nach 30min oder so, jeder User, wenn er nichts mehr gemacht hat ausgeloggt wird. Sonst könnte ja einer, der zufällig die IP eines einst eingeloggten Users hat und sich die SessionID hinfaked^^ wieder Zugang auf die Seite verschaffen.

Weite verbessern könntest du das Loginsystem natürlich über eigene Cookies, in denen du den Username, etc. abspeicherst

Du siehst, es gibt da noch einiges zu lernen, aber http://selfphp.de hat da sehr schöne Seiten und auch Code-Schnipsel!
 
Oben