Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Loginscript

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Loginscript

    Hey Leute ich habe ein Problem mich einzuloggen.

    Undzwar bin ich diesem Tuturial gefolgt: KLICK

    Das Problem ist nun.. Alles funktioniert also
    Registrieren. Sobald ich mich aber einloggen will sagt er "Benutzername oder Passwort falsch" trotz richtiger Eingabe. Weiß einer von euch woran es liegen könnte?

    login.html:
    PHP-Code:
    <form action="login.php" method="post">
    Dein Username:<br>
    <
    input type="text" size="24" maxlength="50"
    name="username"><br><br>

    Dein Passwort:<br>
    <
    input type="password" size="24" maxlength="50"
    name="password"><br>

    <
    input type="submit" value="Login">
    </
    form
    login.php
    PHP-Code:
    <?php 
    session_start
    (); 
    ?> 

    <?php 
    $verbindung 
    mysql_connect("localhost""BenutzerName" "DeinPasswort"
    or die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden"); 
    mysql_select_db("homepage") or die ("Datenbank konnte nicht ausgewählt werden"); 

    $username $_POST["username"]; 
    $passwort md5($_POST["password"]); 

    $abfrage "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1"
    $ergebnis mysql_query($abfrage); 
    $row mysql_fetch_object($ergebnis); 

    if(
    $row->passwort == $passwort
        { 
        
    $_SESSION["username"] = $username
        echo 
    "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>"
        } 
    else 
        { 
        echo 
    "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"
        } 

    ?>

  • #2
    Verbindungsdaten zur Datenbank angepasst?
    Passwort auch md5 verschlüsselt gespeichert?

    PHP-Code:
    //...
    $row mysql_fetch_object($ergebnis); 
    var_dump($row);
    var_dump($passwort);
    exit; 
    Um die Werte mal selbst zu vergleichen.



    Tipp:
    - Wenn du Tutorials siehst, die die mysql_* Funktionen verwenden, sind sie wahrscheinlich veraltet, werden aber zumindest nicht mehr gepflegt. Sieh dir an was gemacht wird und setz die Datenbanksachen mit mysqli_* oder PDO um.
    - Passwörter sicher halten: http://php.net/manual/de/faq.passwords.php
    - Nimm bei deiner Query lieber "username = '$username'
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Zitat von LatexLatte Beitrag anzeigen
      <?php
      $username = $_POST["username"];
      $passwort = md5($_POST["password"]);

      $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
      $ergebnis = mysql_query($abfrage);
      $row = mysql_fetch_object($ergebnis);

      if($row->passwort == $passwort)
      {
      $_SESSION["username"] = $username;
      echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";
      }
      else
      {
      echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>";
      }

      ?>[/PHP]
      So, bevor du eben weiter machst, würde ich dir mal erst empfehlen deine Input-Felder zu Filtern, sonst wäre da schon eine leichte SQL-Injection möglich.

      Code:
      $username = $_POST['username']; //Injection möglich
      $username = mysql_real_escape_string($_POST['username']); //SQL-Injection nicht möglich
      So, schauen wir mal weiter. Ich sehe gar nicht in deinem Code ob du überprüfst ob dieser Eintrag in der Datenbank existiert. Und deine Query, das ist doch nicht dein ernst oder? Am besten machst du folgendes:
      PHP-Code:
      <?php
      $username 
      mysql_real_escape_string($_POST['username']);
      $password md5($_POST['password']);

      $query mysql_query("SELECT * FROM users WHERE username = '".$username."' AND $password = '".$password."' LIMIT 1");
      if(
      mysql_num_rows($query) > {
          
      //erfolgreicher login dein code
      } else {
         
      // nicht erfolgreich error ausgeben oder whatever
      }
      BTW. nutz lieber MySQLi oder am besten PDO.
      MfG.
      Dir gefällt mein Beitrag, ich habe Dir geholfen?
      Bewerte mich doch einfach!

      Kommentar


      • #4
        Benutz mal trim() für Username und Passwort
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Zitat von VPh Beitrag anzeigen
          Passwort auch md5 verschlüsselt gespeichert?
          - md5 ist keine Verschlüsselung
          - md5 ist heutzutage so sicher wie plaintext
          [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

          Kommentar


          • #6
            - verschlüsselt schreibt sich intuitiver als gehashed, sry
            - ja
            - Passwörter sicher halten: http://php.net/manual/de/faq.passwords.php
            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

            Kommentar


            • #7
              md5 ist heutzutage so sicher wie plaintext
              So ein Blödsinn.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Zitat von tkausl Beitrag anzeigen
                - md5 ist keine Verschlüsselung
                - md5 ist heutzutage so sicher wie plaintext
                Zitat von nikosch Beitrag anzeigen
                So ein Blödsinn.
                Natürlich ist das übertrieben, aber vielleicht sind solche Übertreibungen notwendig, um allen Personen klar zu machen, dass auf Geschwindigkeit optimierte Hashfunktionen wie MD5 und SHA1 nicht mehr für die Sicherung von Passwörtern ausreichen.


                Am besten werden die Passwort-Funktionen verwendet die seit PHP 5.5 enthalten sind. Wenn noch eine ältere Version benutzt wird, so können diese Funktionen per password_compat nachgerüstet werden.

                Ich verwende für meine Loginfunktionen meist die E-Mail-Adresse, da sich so Benutzer keine eindeutigen Benutzernamen für das Login ausdenken müssen.

                Benutzer wird mit folgenden Code eingefügt:


                PHP-Code:
                $statement $pdo->prepare("
                    INSERT INTO
                        users(email, password)
                    VALUES
                        (:email, :password)
                "
                );

                $statement->execute(array(
                    
                'email' => $_POST['email'],
                    
                'password' => password_hash($_POST['password'], PASSWORD_DEFAULT)
                )); 

                Und beim Login wird mit folgenden Code geprüft ob ein Benutzer existiert und ob das Passwort korrekt ist:

                PHP-Code:
                $statement $pdo->prepare("
                    SELECT
                        *
                    FROM
                        users
                    WHERE
                        email = :email
                    LIMIT
                        1
                "
                );

                $statement->execute(array(
                    
                'email' => $_POST['email']
                ));

                $user $statement->fetch();

                if(
                password_verify($_POST['password'], $user['password'])) {
                    
                // erfolgreicher login dein code
                }
                else {
                    
                // nicht erfolgreich error ausgeben oder whatever 

                Kommentar


                • #9
                  Noch zur Ergänzung falls es interessiert:

                  Die Passwort-Funktionen von PHP benutzen bcrypt was ein Passwort deutlich besser schützt als MD5 oder SHA1.


                  Mit Hashcat lassen sich Hashwerte wieder in mögliche Passwörter zurückbauen. Ein Beispiel über die Geschwindigkeit, wie viele Passwörter pro Sekunde auf einer dafür optimierten Hardware geprüft werden können:

                  MD5: 93.800.000.000 Passwörter pro Sekunde
                  SHA1: 29.528.000.000 Passwörter pro Sekunde

                  Und ein nettes Zitat über die Geschwindigkeit, wenn versucht wird mit diesem Programm Hashes zu knacken, wenn diese per bcrypt gehashed wurden:

                  I'm trying to crack two bcrypt hashes with a tiny dictionary and am receiving ludicrous rates at about 5-6 c/s.

                  Kommentar


                  • #10
                    Ich verwende für meine Loginfunktionen meist die E-Mail-Adresse, da sich so Benutzer keine eindeutigen Benutzernamen für das Login ausdenken müssen.
                    Ich finde dieses Verfahren total nervig, da man dann idR dem Account keine neue E-Mail zuweisen kann. Außerdem merken sich die Browser die Login-Daten oftmals, so dass auf öffentlichen Rechnern dann meine E-Mail vorgeschlagen wird.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #11
                      Zitat von nikosch Beitrag anzeigen
                      Außerdem merken sich die Browser die Login-Daten oftmals, so dass auf öffentlichen Rechnern dann meine E-Mail vorgeschlagen wird.
                      Interessanter Punkt, muss ich mir mal überlegen.

                      Kommentar


                      • #12
                        Zitat von VPh Beitrag anzeigen
                        Verbindungsdaten zur Datenbank angepasst?
                        Passwort auch md5 verschlüsselt gespeichert?
                        Ja habe ich.

                        - Wenn du Tutorials siehst, die die mysql_* Funktionen verwenden, sind sie wahrscheinlich veraltet, werden aber zumindest nicht mehr gepflegt. Sieh dir an was gemacht wird und setz die Datenbanksachen mit mysqli_* oder PDO um.
                        Ich bin kein richtiger "Pro" was Mysql etc. angeht.. ich habe auch nur von diesem Tuturial "gelernt" und weiß auch bei manchen dingen nicht was ihr redet und wo genau ich eure codes angeben soll..

                        Sorry aber mein IQ ist auch nicht gerade das beste..

                        Kommentar

                        Lädt...
                        X