Erste Versuche mit PHP - Login

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Du solltest deinen Code in Syntax tags schreiben (buttons unter eingabefeld) - habe gar nicht gesehen, dass du eine Fehlermeldung hattest.

    Die Ausgabe kommt, wenn du schon eine Ausgabe gestartet hast bevor session_start aufgerufen wird. Das erkennt man, wenn du die komplette Fehlermeldung postest.
    Sieht admin.php denn wirklich genau so aus? Ohne Leerzeilen & Co?
  • Quellcode

    1. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/web6/31/39/51647739/htdocs/admin.php:2) in /mnt/web6/31/39/51647739/htdocs/secure.php on line 4
    2. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/web6/31/39/51647739/htdocs/admin.php:2) in /mnt/web6/31/39/51647739/htdocs/secure.php on line 4
    3. Bitte anmelden


    Das Login ist nur probehalber auf der Seite!
    Normalerweise kommt es auf auf eine Seite mit folgender Verzeichnisstruktur:

    Verzeichnis "/"
    Ordner "php_includes" - leer (nicht von mir angelegt - automatisch)
    Ordner "php_sessions" - leer (")
    Ordner "temp" - leer (")

    Ordner "xyz" - komplette Webseiten, wo auch das Login rein soll!?


    Deshalb hatte die Frage, ob ich einen "temp"-Ordner brauche - hatte ich in einem Buch über PHP gelesen!

    Sorry, alles etwas drunter und drüber!
    Danke für Deine Geduld.


    Grüße

  • d0nut schrieb:

    Funktion... keine Funktion.. ja, ich würde dir empfehlen es in eine Klasse zu packen. Notwendig ist es natürlich nicht.

    Mal runtergetippt sieht das glaube ich so aus:

    Quellcode

    1. function save($password) {
    2. $salt = rand();
    3. $password = $salt.$password;
    4. $db->update($salt, $password);
    5. }
    6. function login($password) {
    7. return $db->password == sha1($db->salt.$password);
    8. }


    Danke schonmal für so ein Beispiel.

    Wenn ich das richtig verstehe ist Salted Hashes nur ein per zufall generierter Extra String der an das Passwort drangehängt wird?
    Bei der Funtkion save(); wird der Variabel $salt per Zufall etwas zugewiesen. Das $password ist dann $salt + $password. $db->update denke ich mal ist für UPDATE user usw.

    Allerdings verstehe ich nicht ganz wie man sich dann einloggen soll.

    Wenn dieser Salted Hash jedes mal neu generiert wird bei einer Speicherung also z.B. bei der Registrierung vom User wie soll man sich dann einloggen wenn man nur sein normales Passwort welches zb jetzt "passwort" ist kennt?
    Also ich mein der erstellte Salted Hash wird doch nicht erneut generiert bzw. sehr sehr unwahrscheinlich das dies passiert.

    Im großen und ganzen wäre es also dann am besten eine Kombination von Salted Hashes + md5/sha1 oder so zu verwenden?
  • brutal runtergebrochen dürfte das deine frage beantworten:

    Quellcode

    1. <?php
    2. function adduser($username, $password)
    3. {
    4. $salt = rand();
    5. $password = hash("sha512", $password.$salt);
    6. $user = array("username" => $username, "password" => $password, "salt" => $salt);
    7. $db->save($user);
    8. }
    9. function getuser($username, $password)
    10. {
    11. $user = $db->get("username = ?", $username);
    12. if($user)
    13. {
    14. if($user->password === hash("sha512",$password.$user->salt))
    15. {
    16. # user ist verifiziert, login darf erfolgen
    17. }
    18. }
    19. }
    20. ?>
    Alles anzeigen
  • Danke für das Beispiel erstmal.

    Allerdings bin ich nicht so gerade schlauer geworden. Ich brauch nicht wirklich ein Code sondern nur ne Erklärung wie das funktionieren sollte ^^".

    Also als Beispiel:

    Benutzer01 hat das Passwort "passwort123"

    Der Salt wird per rand(); generiert. Also irgendetwas zufälligs? z.B 3123567

    Wenn der Salt aber im Code generiert, an das Passwort gespeichert und dannin die SQL Datenbank geschickt wird, wie geht das mit dem Login?

    Der Benutzer01 kann sich doch dann nicht mit Benutzer01 // passwort123 einloggen da dieses 3123567 im Passwort fehlt? Also gibt er dann ein Fehler zurück dass das Passwort falsch ist.
  • Die Variable $salt mit dem Zufallswert wird ja ebenfalls in der Datenbank gespeichert. In der Tabelle 'user' gibt es zu jedem user das spezifische salt.

    Quellcode

    1. $user = array("username" => $username, "password" => $password, "salt" => $salt);
    2. $db->save($user);

    Hiermit wird hier das salt aus der db geholt und für den Login ans Passwort gehängt.

    Quellcode

    1. $password.$user->salt


    Mal eine Frage, die ich mir dazu immer stelle. Angenommen jmd verschafft sich irgendwie Zugang zur Datenbank und liest die Tabelle 'user' aus - da wird er doch auch die salt Spalte mitnehmen?