Ankündigung

Einklappen
Keine Ankündigung bisher.

Login Formular absichern mysql_real_escape_string

Einklappen

Neue Werbung 2019

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

  • Login Formular absichern mysql_real_escape_string

    Hallo liebe Community,

    Ich bin ein PHP Anfänger und stoße jetzt an meine Grenzen. Ich lerne Php aus einigen Büchern die ich mir zugelegt habe. Leider steht da kein Beispiel über mysql_real_escape_string.

    Ich habe hier ein Login mit Sessions geschrieben, ganz simples formular
    PHP-Code:
    <?php
      session_start
    ();
      
      require_once 
    "dbconfig.php";
      
      if(isset(
    $_POST["login"])) {
        
        if(
    $_POST["benutzername"] != "" && $_POST["passwort"] != "") {

          
    $query mysql_query("SELECT pass FROM benutzerdaten WHERE name ='".$_POST["benutzername"]."'");
          
    $dbpass mysql_fetch_assoc($query);
          
    $dbpass $dbpass["pass"];
          
          if(
    $_POST["passwort"] == $dbpass) {
            
    header("location: start.php");
            
    $_SESSION["login"] = $_POST["benutzername"];
          }
          else {
            echo 
    "Benutzer oder Passwort falsch";
          }
                
        }
        else {
          echo 
    "F&uuml;lle alle Felder aus";
        }
      }

    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Login</title>
    </head>

    <body>

      <form method="post" action="index.php">
        <table>
        <tr>
          <td>Benutzername:</td>
            <td><input type="text" name="benutzername" placeholder="Benutzername"></td>
        </tr>
        <tr>
          <td>Passwort:</td>
            <td><input type="password" name="passwort" placeholder="Passwort"></td>
        </tr>
        <tr>
          <td><input type="submit" name="login" value="Login"></td>
        </tr>
        </table>

    </body>
    </html>

    Wie ihr seht überprüft er die Daten in der MySQL und wenn das PW stimmt leitet er weiter zur start.php wo er dann die Session checkt. Funktioniert auch alles, jetzt komme ich aber zur Sicherheit dieses Formulars.

    Nun zu meinen Fragen:

    1.Muss ich bei diesem Formular mysql_real_escape_string verwenden?
    2. Kann ich den Code irgendwie noch übersichtlicher gestalten? Habe ich es evtl. zu aufwändig geschrieben, wäre es auch kürzer gegangen?

    Vielen herzlichen Dank und einen schönen sonnigen Sonntag euch noch.


  • #2
    1. Ja.
    2. Besser gehts immer. Das größte Problem ist, dass Deine Ausgaben nicht im Markup erfolgen, Dein Form nicht geschlossen ist, dass Deine Header keine Abbruchbedingungen vor dem Markup erzeugen, dass potentiell viel zu viel aus der DB ausgelesen wird, dass isset($_POST["login"]) nichts über das Vorhandensein der anderen Daten aussagt, dass Deine Passwörter im Klartext gespeichert werden usw.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von nikosch Beitrag anzeigen
      1. Ja.
      2. Besser gehts immer. Das größte Problem ist, dass Deine Ausgaben nicht im Markup erfolgen, Dein Form nicht geschlossen ist, dass Deine Header keine Abbruchbedingungen vor dem Markup erzeugen, dass potentiell viel zu viel aus der DB ausgelesen wird, dass isset($_POST["login"]) nichts über das Vorhandensein der anderen Daten aussagt, dass Deine Passwörter im Klartext gespeichert werden usw.
      Vielen Dank erstmal für deine Antwort.
      Habe gar nicht gesehen das die Form nicht geschlossen wurde, mache ich normal immer. Das meine Passwörter im Klartext gespeichert werden das wusste ich, habe bewusst das mit md5 erstmal nicht gemacht, da mich das mit mysql_real_escape_string gerade mehr interessiert hat.

      Ich verstehe nicht deine Aussage das viel zu viel aus der DB ausgelesen wird. Wie hätte ich es sonst machen sollen? Und was meinst du mit Header, Markup?

      Vielen Dank

      Kommentar


      • #4
        Und was meinst du mit Header, Markup?
        Google ist Dein Freund. Ich werde Dir jetzt nicht Dein Script erklären.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Ich verstehe nicht deine Aussage das viel zu viel aus der DB ausgelesen wird.
          Wieso das Passwort auslesen, wenn du es schon in der WHERE - Klausel überprüfen kannst?
          http://hallophp.de

          Kommentar


          • #6
            habe bewusst das mit md5 erstmal nicht gemacht...
            md5 wäre ein Schritt in die richtige Richtung, allerdings ein zu kleiner. Hier steht, wie du am besten hashst:
            http://php.net/manual/de/faq.passwords.php


            Standardtext für die Datenbankverbindung:
            Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt. Zudem ist deine Query anfällig für SQL-Injections.
            Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
            Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              Wieso das Passwort auslesen, wenn du es schon in der WHERE - Klausel überprüfen kannst?
              Das kann man schon machen, aber dann halt mit LIMIT. Spürt nämlich den Fehler auf, dass ein User mehrfach eingetragen ist. Zum zweiten liest es gleich den User aus, bspw. um fehlerhafte Logins in der Session zu behandeln.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                echo "F&uuml;lle alle Felder aus";
                Derartige Entities sind unnötig und deuten auf einen Zeichensatz-Fehler irgendwo hin. Siehe dazu etwa: http://php-de.github.io/jumpto/faq/#html-charset

                Kommentar

                Lädt...
                X