Ankündigung

Einklappen
Keine Ankündigung bisher.

Login Script sicher?

Einklappen

Neue Werbung 2019

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

  • Login Script sicher?

    Hallo Leute,

    ich habe mir eigenmächtig ein Loginscript für einen Admin Bereich geschrieben und möchte gerne wissen ob es auch sicher oder eher Unsicher ist. Welche Möglichkeiten es zu verbessern gibt und was gar nicht geht. Das sich das Script direkt bei der mysql Datenbank einloggt ist beabsichtigt, die Passwörter sollten nicht gespeichert werden.

    login.php
    PHP-Code:
    <?php
        
    @session_start();
        if(
    md5(session_id().$_SESSION['pass'])==$_SESSION['IH'])
        {
            
    Header("Location: index.php"); 
            exit();
        }

        
    $action stripslashes($_POST["login"]);
        if(
    $action)
        {
            
    $user stripslashes($_POST["user"]);
            
    $pass stripslashes($_POST["pass"]);
            if(
    $user&$pass)
            {
                if(!@
    mysql_connect("localhost",$user,$pass))
                {    
                    
    ?><meta http-equiv="refresh" content="5; URL=login.php"><?php
                    
    die ("Keine Verbindung moeglich: " mysql_error());
                    
    mysql_close($mysql_login);                
                }
                
    mysql_select_db("fakerscript")or die ("Die Datenbank existiert nicht.");
                
    $IH md5(session_id().$pass); 
                
    $_SESSION['IH'] = $IH;
                
    $_SESSION['pass'] = $pass;    
                echo 
    "Login successfully!...";
                
    ?><meta http-equiv="refresh" content="5; URL=index.php"><?php
                 
    exit(); 
                 }
        }
    ?>
    <form action="login.php" method="post"><br><br>
        Username: <input type="text" size="17" name="user"><br><br>
        Passwort: <input type="password" size="17" name="pass"><br><br>
        <input name="login" type="submit" value="Login">
        </input>
    </form>
    index.php
    PHP-Code:
    <?php
        session_start
    ();

        
    $action stripslashes($_POST["logout"]);
        if(
    $action)
        {    
            
    session_unset();
              
    $_SESSION=array();
            echo 
    "Logout successfully!...";
            
    ?><meta http-equiv="refresh" content="5; URL=login.php"><?php
            
    exit();
        }
        
        if(!
    md5(session_id().$_SESSION['pass'])==$_SESSION['IH'])
        {
            echo 
    "Zugriff verweigert!...";
            
    ?><meta http-equiv="refresh" content="5; URL=login.php"><?php
            
    exit();
        }
    ?>
    Admin Bereich.
    <form action="index.php" method="post">
    <input type="submit" name="logout" value="Logout">
    </form>
    Danke im Vorraus für Antworten.

    MfG Fl0x

  • #2
    Wo wird diese Variable gesetzt $mysql_login ?


    PHP-Code:
    if($action
    Ist $action eine bool'sche Variable?


    Verwende session_destroy() um ein Session zu löschen und nicht session_unset().

    Wenn du eine Meta-Weiterleitung machst, lohnt es sich noch eine Fehlermeldung auszugeben?


    PHP-Code:
    $_SESSION=array(); 
    Wozu das?

    Kommentar


    • #3
      Also theoretisch ist es sicher, da nirgendswo das Passwort ausgelesen werden kann.

      Jedoch musst du folgendes Bedenken:

      mysql_connect() nutzt bei Fehlen des Benutzernamens den "Name(n) des Benutzers dem der Server-Prozess gehört ". Im schlimmsten Fall also dein Benutzername. Und wenn dein Benutzername dem des MySQL gleicht, dann muss man "nur" noch das Passwort herausfinden und nicht den Benutzernamen.

      Außerdem gibst du dem Script die Macht sich auch als root anzumelden.

      Ich weiß aber auch nicht wie sich das Script auf die Performance auswirkt. Dürfte aber kein großer Unterschied zu in Datenbank gespeicherten Login-Systemen sein.

      Die Formulare und die Auswertung der Formulare erwähn ich mal nicht als Kritikpunkt , weil ich das als Testscript ansehe.

      Kommentar


      • #4
        Versuch mal validen HTML Code zu erzeugen, sowas:
        PHP-Code:
        echo "Zugriff verweigert!...";
                ?><meta http-equiv="refresh" content="5; URL=login.php"><?php
        macht keinen Sinn.

        Kommentar


        • #5
          @chriz

          Als PHPler hätt ich da jetzt nicht den Tipp für valides HTML gegeben sondern den Tipp ein header redirect zu machen.

          PHP-Code:
          $host  $_SERVER['HTTP_HOST'];
          $uri   rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
          header("Location: http://$host$uri/login.php"); 

          Kommentar


          • #6
            Dann aber das exit nicht vergessen.

            Kommentar


            • #7
              $_SERVER['PHP_SELF'] nicht ungefiltert lassen! $_SERVER['PHP_SELF'] can not be trusted, but there are safe alternatives - The Q
              Mit XSS und anderen Angriffsvektoren musst du dich selber beschäftigen oder eine Firma konsultieren.

              Kommentar


              • #8
                Vielen Dank für die zahlreichen Antworten. Ich hab nun das Script nun noch einmal umgeschrieben und hoffe das es besser geworden ist.

                Zitat von JSON_Magic
                mysql_connect() nutzt bei Fehlen des Benutzernamens den "Name(n) des Benutzers dem der Server-Prozess gehört ". Im schlimmsten Fall also dein Benutzername. Und wenn dein Benutzername dem des MySQL gleicht, dann muss man "nur" noch das Passwort herausfinden und nicht den Benutzernamen.
                Mit der if-abfrage
                if($user&$pass)
                dürfte das doch erledigt sein.
                Wenn eine Variable fehlt kommt es nicht zum connecten.
                Zitat von JSON_Magic
                Als PHPler hätt ich da jetzt nicht den Tipp für valides HTML gegeben sondern den Tipp ein header redirect zu machen
                Sry, wenn ich so dumm frage aber für was soll das gut sein?

                PS: Das ist ein Testscript.
                login.php
                PHP-Code:
                <?php
                    session_start
                ();
                        
                    if(
                $_POST["logout"])
                    {
                        
                session_unset();
                        
                session_destroy();
                        echo 
                "Logout successfully!...";            
                    }

                    if(
                md5(session_id().$_SESSION['pass'])==$_SESSION['IH'])
                    {
                        
                Header("Location: index.php"); 
                        exit();
                    }

                    if(
                $_POST["login"])
                    {
                        
                $user stripslashes($_POST["user"]);
                        
                $pass stripslashes($_POST["pass"]);
                        if(
                $user&$pass)
                        {
                            if(!@
                mysql_connect("localhost",$user,$pass))
                            {    
                                
                ?><meta http-equiv="refresh" content="5; URL=login.php"><?php
                                
                die ("Keine Verbindung moeglich: " mysql_error());
                            
                mysql_close($mysql_login);                
                            }
                            
                mysql_select_db("fakerscript")or die ("Die Datenbank existiert nicht.");
                            
                $IH md5(session_id().$pass); 
                            
                $_SESSION['IH'] = $IH;
                            
                $_SESSION['pass'] = $pass;    
                            
                Header("Location: index.php"); 
                            exit();
                        }
                    }
                ?>
                        <form action="login.php" method="post"><br><br>
                                Username: <input type="text" size="17" name="user"><br><br>
                                Passwort: <input type="password" size="17" name="pass"><br><br>    
                                <input name="login" type="submit" value="Login">
                               </input>
                        </form>
                index.php
                PHP-Code:
                <?php
                    session_start
                ();
                  
                    if(!
                md5(session_id().$_SESSION['pass'])==$_SESSION['IH'])
                    {
                        
                header("Location: login.php");
                    exit();
                    }
                ?>
                Admin Bereich.
                <form action="login.php" method="post">
                <input type="submit" name="logout" value="Logout">
                </form>
                Bin dankbar für jede weitere Kritik.

                MfG Fl0x

                Kommentar

                Lädt...
                X