Login Fehlgeschlagen

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

  • Login Fehlgeschlagen

    Hallo Leute,

    ich hab mal wieder ein Problem.
    Diesmal geht es um einen Login-Bereich mit MySQL-Datenbank.
    Hier das Script (hab ich von einem Tutorial):

    Quellcode

    1. <form action="login.php" method="post">
    2. Dein Username:<br>
    3. <input type="text" size="24" maxlength="50"
    4. name="username"><br><br>
    5. Dein Passwort:<br>
    6. <input type="password" size="24" maxlength="50"
    7. name="password"><br>
    8. <input type="submit" value="Login">
    9. </form>
    Alles anzeigen

    Quellcode

    1. <?php
    2. session_start();
    3. $verbindung = mysql_connect("localhost", "db_username" , "db_passwort")
    4. or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
    5. mysql_select_db("db_name") or die ("Datenbank konnte nicht ausgewählt werden");
    6. $username = $_POST["username"];
    7. $passwort = md5($_POST["password"]);
    8. $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
    9. $ergebnis = mysql_query($abfrage);
    10. $row = mysql_fetch_object($ergebnis);
    11. if($row->passwort == $passwort)
    12. {
    13. $_SESSION["username"] = $username;
    14. echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";
    15. }
    16. else
    17. {
    18. echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
    19. }
    20. ?>
    Alles anzeigen


    Ich habe die Datenbank per PhpMyAdmin gefüttert mit zwei Usern:
    Username: test, passwort: test
    Username:Fipsi, passwort: janeinja

    Ich habe auch schon überprüft, ob die md5-verschlüsselung nicht geht, aber auch ohne funktioniert das nicht.
    Ich weiß jez nix mehr und mit datenbank kenn ich mcih sowieso nicht aus:D

    Ich zähle auf eure Hilfe;)

    LG

    Fipsi
  • Also grundsätzlich gibt es ein paar Sicherheitslücken in deinem Script. Auf die können wir später noch eingehen.

    Ich denke mal du hast das Passwort in der MySQL Datenbank direkt reingeschrieben? Also in der Zeile, in der z.B. der Benutzer test steht, wird auch direkt das Passwort "test" stehen. In der MySQL Datenbank muss das Passwort natürlich auch verschlüsselt (in diesem Fall mit md5) hinterlegt werden)
  • nein, die heißt "Teamecke-login"

    kann mir jemand sagen, was ich dann verändern muss? das einzigste mit login im code war das heir:

    Quellcode

    1. $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";


    habs schon ausgetauscht, das "login", mit "Teamecke-login", aber das funzt auch nicht...

    Edit: war schon das... hab ne neue Tabelle mit nem anderem Namen gemacht (teamecke_login), der ging...
    also das hat sich erledigt...
    Allerdings hätte ich jez noch was anderes...

    Und zwar hab ich linsk in der Navi stehen: "Logout []" und in den Klammern hätte ich gerne den Namen stehen...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fipsi ()

  • achso, also immer wenn ich was aus der Datenbank sehen will

    Quellcode

    1. echo 'bla ' . $_SESSION['[..]'] . ' bla';


    Und wie kann ich das machen, dass wenn ich auf logout wirklich ausgeloggt werd? weil ich habs ausprobiert: ich konnte wieder so rein...

    ich hab die seite so:

    Quellcode

    1. <?php
    2. session_start();
    3. [...]
    4. if(!isset($_SESSION["email_adresse"]))
    5. {
    6. echo 'Bitte erst <a href="login.html">einloggen</a>';
    7. exit;
    8. }
    9. ?>
  • hm... ok... ehrlich gesagt, hab ich bisher fast nur so gelernt^^

    na ja... dann setz ich mich mal an ein tutorial... mal gucken, vllt. find ich ja eins, mit dem ich weit komm... hatte schon eins, aber da war ich ziemlich shcnell draußen...

    Edit:

    ich seh gerade:
    Wenn cih mit Benutzername Fipsi einlogge kommt aber der username "test" ($_SESSION["username"), auch wenn ich mich als jemand anderer eingeloggt habe...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fipsi ()

  • Wenn du dich ausloggen willst dann musst du die Session zurücksetzen mit unset.
    Und nein $_SESSION liest Sachen aus der Session aus und nicht aus der Datenbank ;)

    Für Datenbank-Abfragen brauchst du sowas zB.

    Quellcode

    1. $sql = "SELECT * FROM BLA";
    2. $sql = mysql_query($sql);
    3. $row = mysql_fetch_object($sql);
    4. echo $row->tabellen_spalte;


    Eine Art Sachen auszulesen.
    Schau dir am besten MySQL Abfragen an .. Dort gibt es auch eine andere Möglichkeit anstatt mysql_fetch_object(); zu benutzen.

    Learning by doing ist das beste ;) Auch wenn man 0 Ahnung hat.
    Google hilft ;)


    Links:

    php.net/manual/en/function.unset.php
    selfphp.info/forum/showthread.php?t=13544
    schattenbaum.net/php/abfrage.php
  • Wegen der Sicherheit solltest du deine MySQL Abfrage auch immer wie folgt umbauen:

    Quellcode

    1. $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '".mysql_real_escape_string($username)."' LIMIT 1";


    Alle Variabeln, die du in deinen Abfrage verwendest musst du parsen. Okay alle muss man nicht, aber es schadet nicht, wenn du das einfach schon aus Gewohnheit so machst. Bei Zahlenwerten verwendest du intval() und bei Strings etc. immer mysql_real_escape_string()

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Szabo ()

  • Quellcode

    1. $username = $_POST["username"];
    2. $passwort = md5($_POST["password"]);
    3. $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
    4. $ergebnis = mysql_query($abfrage);
    5. $row = mysql_fetch_object($ergebnis);
    Mich würde eher interessieren was die Suche "LIKE" in der Abfrage zu suchen hat. Benutzername und Passwörter sind doch ehh eindeutig und sollten nicht geschut werden. Im weiteren fehlen die %-WildCards um einer Suche noch den letzten Schliff zu geben. Aber das würde bedeuten, das alle Usernamen die z.B. den Namen Test enthalten, in betracht kämen. Bei deinem derzeitigen Script könnte es dazu führen, das der Member sich garnicht erst einloggen kann, da ja auf 1 Eintrag der db, der das Wort Test im Namen enthält, limitiert wird.

    Im zweiten Ansatz, halte ich es für unnütz, das Passwort nachträglich auf Richtigkeit zu prüfen. Mit einfachen Mitteln kann man die Datenbank selber benuzten, um das Passwort zu validieren und somit den Benutzer zu verifizieren.

    Quellcode

    1. //Eingaben einlesen und direkt escapen, so das keine Injections durchgeführt werden können
    2. $username = mysql_real_escape_string($_POST["username"]);
    3. $passwort = md5(mysql_real_escape_string($_POST["password"]));
    4. //anschließend die Datenbank fragen
    5. $abfrage = mysql_query("SELECT * FROM login WHERE username = '".$username."' AND passwort = '".$passwort."' LIMIT 1");
    6. //Wenn man $abfrage nun auf Inhalt prüft (treffer zählen), kann entweder nur 0 oder 1 raus kommen. Diese werte sind mit False und True gleich zu stellen.
    7. //True ist $abfrage nur, wenn in der Datenbank, der Benutzername zusammen mit dem Passwort gefunden werden konnte. Ansonsten ist $abfrage immer false (leer)
    8. If (mysql_num_rows($abfrage))
    9. echo "Login erfolgreich";
    10. else
    11. echo "Username und/oder Passwort falsch!";
    Alles anzeigen



    So long
    CoPyMaus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von CoPyMaus ()

  • Die getrennte Abfrage nach dem Passwort macht schon Sinn, da du so zwei verschiedene Fehlermledungen geneieren kannst.

    Wenn du nach Benutzername & Passwort fragst, bekommst du entweder einen Datensatz oder eben nicht. Fragst du zu erst den Benutzer ab und bekommst keinen Datensatz, dann ist der Benutzername falsch. Bekommst du deinen Datensatz und das Passswort stimmt nicht überein, dann ist nur das eingegebene Passwort falsch, der Nutzer aber vorhanden. Macht also schon Sinn :)