Mein Loginscript so sicher?

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

  • Mein Loginscript so sicher?

    ich bin Anfänger in Sachen PHP Programmierung und habe mithilfe von einem Tutorial ein Login-Skript etstellt.

    Nun wollte ich eure Meinung in Hinsicht auf die Sicherheit des Skriptes wissen..

    In meiner Datenbank "benutzer" befindet sich die Tabelle "login" mit diesem Inhalt:

    Code:
    CREATE TABLE login (id mediumint(7) NOT NULL auto_increment, user VarChar(50) NOT NULL, password VarChar(50) NOT NULL, email varchar(255) NOT NULL default '', firstname varchar(255) NOT NULL default '', lastname varchar(255) NOT NULL default '', PRIMARY KEY  (id))";
    Ich trage in die erstellen.html die Daten ein und lasse diese mit der eintragen.php in die Tabelle schreiben:

    Code:
    <?php 
    $db = "benutzer";
    $tb = "login"; 
    // Aufbau der Datenbankverbindung  
    include ("connect.php");
    $username = $_POST['user'];
    $passwort = $_POST['pass'];
    $email    = $_POST['mail'];
    $vorname  = $_POST['vname'];
    $nachname = $_POST['nname'];
     
     
    $con  = mysql_connect ($host, $user, $pass);  
    if (!mysql_select_db ($db, $con))  
    {  
      die ("Keine Verbindung zur Datenbank");  
    }  
    $sql = "INSERT INTO $tb (user, password, email, firstname, lastname) VALUES ('". mysql_real_escape_string($username) ."', '". md5 ($passwort)."', '". mysql_real_escape_string($email) ."','". mysql_real_escape_string($vorname) ."', '". mysql_real_escape_string($nachname) ."')";
    mysql_query ($sql, $con);  
      if (mysql_affected_rows ($con) > 0)  
      {  
        echo "Benutzer erfolgreich angelegt.<br>\n";  
      }  
      else  
      {  
       echo "Fehler beim Anlegen der Benutzer.<br>\n";  
      }  
     
    ?>

    nun der eigentliche login mit:

    formular.php:

    Code:
    <?php session_start (); ?> 
    <html>  
    <head>  
      <title>Login Seite</title>  
    </head>  
    <body>  
    <?php  
    if (isset ($_REQUEST["fehler"]))  
    {  
      echo "Die Zugangsdaten waren ungültig.";  
    }  
    ?>  
    <form action="login.php" method="post">  
      Name: <input type="text" name="name" size="20"><br>  
      Kennwort: <input type="password" name="pwd" size="20"><br>  
      <input type="submit" value="Login">  
    </form>  
    </body>  
    </html>
    login.php:

    Code:
    <?php  
    session_start();
    $db = "benutzer";
    $tb = "login";
     
    // Zuganglog
    include ("zugang.php");
     
    // SQL-Injection Schutz
    $name  = $_POST['name'];
    $pwd   = $_POST['pwd'];  
    include ("connect.php");
     
    $con = mysql_connect($host, $user, $pass) or die ("<b>Keine</b> Verbindung zum MySQL-Server möglich.");
    echo ("Verbindung zum MySQL- Server <b>$host</b> war erfolgreich");
    mysql_select_db($db, $con);
    echo ("Verbindung zur Datenbank <b>$db</b> war erfolgreich!");
     
    $sql = "SELECT * FROM $tb WHERE user= '". mysql_escape_string($name)."' AND password= '".md5 (mysql_escape_string($pwd))."'";
     
    $result = mysql_query($sql, $con);  
     
    if(mysql_num_rows($result) > 0)  
    {  
    // Benutzerdaten in ein Array auslesen.  
    $data = mysql_fetch_array($result);  
    // Sessionvariablen erstellen und registrieren  
     
    $_SESSION["user_id"]       = $data["id"];  
    $_SESSION["user_nickname"] = $data["user"];  
       header('Location: /test/Logins/Login2/intern.php');
       exit();
    }  
    else  
    {  
       header('Location: /test/Logins/Login2/formular.php?fehler=1');
       exit();
    }  
    ?>


    checkuser.php:

    Code:
    <?php  
    session_start(); 
     
    if (!isset ($_SESSION["user_id"]))  
    {  
      header ("Location: /test/Logins/Login2/formular.php");  
    }  
    ?>

    intern.php

    Code:
    <?php  
    include ("checkuser.php");  
    ?>  
    <html>
    <head>
      <meta content="text/html; charset=ISO-8859-1"
     http-equiv="content-type">
      <title>Interner Bereich</title>
    </head>
    <body>
    <table style="text-align: left; width: 555px; height: 32px;"
     border="1" cellpadding="2" cellspacing="2">
      <tbody>
        <tr>
          <td style="width: 371px;">Benutzer: <?php echo $_SESSION["user_nickname"]; ?> eingeloggt&nbsp; mit User ID: <?php echo $_SESSION["user_id"]; ?></td>
          <td style="width: 164px;"><a href="logout.php">Logout</a></td>
        </tr>
      </tbody>
    </table>
    <br>
    <table style="text-align: left; width: 557px; height: 229px;"
     border="1" cellpadding="2" cellspacing="2">
      <tbody>
        <tr>
          <td style="vertical-align: top;">Dir stehen folgende
    Funktionen zur Verf&uuml;gung:<br>
          <br>
    <a href="benutzer.php">Benutzerverwaltung<br>
          <br>
          </td>
        </tr>
      </tbody>
    </table>
    </body>
    </html>
    logout.php:


    Code:
    <?php  
    // Wird ausgeführt um mit der Ausgabe des Headers zu warten.  
    ob_start();  
    session_start();  
    session_unset();  
    session_destroy();  
    header ("Location: /test/Logins/Login2/formular.php");  
    ob_end_flush();  
    ?>
    [FONT=Courier New][COLOR=#007700]Vielen dank schonmal im Voraus [/COLOR][/FONT]

  • #2
    Statt md5 würde ich sha1 verwenden, ansonsten sehe ich da spontan nichts dran auszusetzen.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      danke für die antwort.

      habe jetzt von md5 auf sha1 gewechselt..

      greeZ

      Kommentar


      • #4
        Fehlerabfragen?

        Sehe in dem script(en) keinerlei fehlerabfragen auf falscheingabe.

        solltest du noch einbauen.

        vor allem ne regex für die emailadresse.

        Kommentar


        • #5
          PHP-Code:
          AND password'".md5 (mysql_escape_string($pwd))."'" 
          ... mysql_escape_string hier anzuwenden ist überflüssig, die md5 Funktion verändert den Inputstring dermaßen schon, dass eine Gefahr nicht mehr besteht.
          Zuletzt geändert von asp2php; 11.05.2009, 09:16.

          Kommentar


          • #6
            Zur Ergänzung: Falls jemand in seinem Passwort z.B. Quotes verwendet sieht der Hashwert von

            md5 (mysql_escape_string($pwd))

            anders aus als von

            md5 ($pwd)

            Beim Logout kann man noch mehr machen: s. erstes Beispiel auf PHP: session_destroy - Manual

            Kommentar


            • #7
              Beim Logout kann man noch mehr machen: s. erstes Beispiel auf PHP: session_destroy - Manual
              Aber warum sollte man das tun?
              Das Löschen des Cookies ist recht sinnfrei.
              Wir werden alle sterben

              Kommentar


              • #8
                Zitat von combie Beitrag anzeigen
                Aber warum sollte man das tun?
                Das Löschen des Cookies ist recht sinnfrei.
                Vor allem würde ich damit auch alle anderen Daten in der Session verlieren.

                Kommentar


                • #9
                  Man kann dies tun (natürlich nur, um alle Daten in dem Zusammenhang zu entfernen)

                  Kommentar


                  • #10
                    Zitat von Cheadle Beitrag anzeigen
                    Man kann dies tun (natürlich nur, um alle Daten in dem Zusammenhang zu entfernen)
                    Was sind ALLE?

                    Dieses sollte doch reichen:
                    PHP-Code:
                    function logout()
                    {
                      
                    $_SESSION = array();
                      
                    session_regenerate_id(true);

                    Das Cookie ist beim Browserschließen sowieso weg.

                    PS:
                    Deine Locationheader sind kaputt, entsprechen nicht der HTTP Spezifikation. Und sowieso sind die wohl recht überflüssig. Auch das Outputbuffer Gedöns ist überflüssig. Halte dich besser an das "EVA Prinzip".
                    Zuletzt geändert von combie; 11.05.2009, 09:58.
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Zitat von combie Beitrag anzeigen
                      Das Cookie ist beim Browserschließen sowieso weg.
                      Ja. Aber warum sollte man sich darauf verlassen? Viele schalten ihren Rechner nur in den Ruhezustand, ohne die Fenster zu schließen.

                      Kommentar


                      • #12
                        Warum die ganze Session killen? Ich will meine anderen Session-Daten doch noch behalten!
                        Das hier reicht aus:
                        PHP-Code:
                        unset($_SESSION['user']); 
                        Oder wo auch immer die Benutzerdaten in der Session liegen.

                        Kommentar


                        • #13
                          Zitat von Cheadle Beitrag anzeigen
                          JViele schalten ihren Rechner nur in den Ruhezustand, ohne die Fenster zu schließen.
                          Und?
                          Wo ist das Problem?
                          Siehst du Geister?
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Zitat von combie Beitrag anzeigen
                            Und?
                            Wo ist das Problem?
                            Siehst du Geister?
                            Kannst du deine Fragen sachlich formulieren?
                            Anhand des Beispiels aus dem Manual wird gezeigt, wie man alle Spuren der Session entfernen kann. Ob man davon Gebrauch macht oder nicht, bleibt jedem selbst überlassen und ist abhängig vom Script und von der Frage, welche Session-Daten darüberhinaus benötigt werden. Bei den Sicherheitsthemen schadet es nie, zu wissen, welche Möglichkeiten man hat.

                            Kommentar


                            • #15
                              Kannst du deine Fragen sachlich formulieren?
                              Habe ich versucht. Du gehst da aber leider nicht drauf ein.

                              Ich kanns ja noch mal probieren:
                              Welche Sorgen plagen dich wirklich?
                              Wo siehst du sicherheitstechnische Bedenken?
                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X