kostenloser Webspace werbefrei: lima-city


suche ein login script für einen admin bereich

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    personalstereo

    personalstereo hat kostenlosen Webspace.

    da mein provider kein .htaccess unterst?tzt, muss ich mir eine andere variante f?r einen sicheren login einfallen lassen (warscheinlich in php). gibt es da gute und vorallem sichere varianten in php? ( meinentwegen auch in anderen sprachen )

    mfG

    Beitrag ge?ndert am 17.07.2006 16:20 von personalstereo
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. s*********e

    klar gibt es das, such ma bei google, der is dein freund ;)

    zb. "php sicheres lognscript"
  4. p***2

    wenn Du es seler nicht schreiben kannst, schau mal hier :
    http://www.accessprotect.com/
    ansonsten kanste Dier das noch ein wenig sicherer machen !!! und einsetzen :

    Achtung:
    Dieses Tutorial gew?hrleistet keinerlei Sicherheit des Logins. Die Verwendung der hier vorgestellten Quelltext erfolgt auf
    eigene Gefahr.


    Aber jetzt mal zum Thema.
    Wir m?chten also eine geheime Seite haben, die nur per Login erreicht werden kann. Wir brauchen also auf jeden Fall mal ein
    Loginformular.

    Die Datei enth?lt keinerlei PHP-Code, da dies nicht unbedingt n?tig ist. Aus diesem Grunde habe ich der Datei auch die
    Endung .html gegeben. Das kann nat?rlich je nach Bedarf ge?ndert werden.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head><title>Login</title></head> 
    <body> 
        <h1>Loginformular</h1>     
          <form action="validateLogin.inc.php" method="post"> 
             <input type="text" name="username"> 
             <input type="password" name="passwort"> 
             <input type="submit" name="login" value="Einloggen"> 
          </form> 
    </body> 
    </html>


    Das Formular wird an die PHP-Datei "validateLogin.inc.php" geschickt.
    Diese Datei ?berpr?ft die Richtigkeit der Eingaben und leitet den User je nach Ergebnis der ?berpr?fung weiter.
    Schauen wir uns also diese Datei etwas n?her an.

    Die Datei validateLogin.inc.php - das Kernst?ck des Logins
    Hier passiert relativ viel. Da wird mit Sessions arbeiten m?ssen wird zun?chst einmal die Session starten.
    PHP:
    <?php session_start(); ?>

    Danach ?berpr?fen wir, ob der User die Eingaben ?berhaupt gemacht hat. Ist dies der Fall, so beginnt die eigentliche
    Validierung der Eingaben.
    Unser Nutzerdaten sind in einer Datenbank gespeichert. Erst wenn wir sicher sind, dass der Nutzer die Angaben komplett
    gemacht hat erstellen wir eine Verbindung zur Datenbank. Dazu binden wir eine Konfigurationsdatei ein, die die Zugangsdaten
    zur Datenbank enth?lt.
    Danach erstellen wir die Verbindung.

    PHP:
    <?php 
        // ?berpr?fen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden. 
        if( isset($_POST['username'], $_POST['passwort']) 
            AND 
            strcmp(trim($_POST['username']),'') != 0 
            AND 
            strcmp(trim($_POST['passwort']),'') != 0 ) {         
              // Einbinden der Konfigurationsdatei 
              include_once 'config.inc.php';           
              // Erstellen der Verbindung zur MySQL-Datenbank 
              if( !$connection = mysql_connect( $_config['host'], $_config['user'], $_config['password'] ) ) { 
                   die( 'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' ); 
              } 
              if( !mysql_select_db( $_config['database'], $connection ) ) { 
                  die ( 'Die Datenbank ' . $_config['database'] . ' kann nicht verwendet werden. <br /> 
                           MySQL-Error: <br />' . mysql_error() ); 
              }          
    ?>

    Nun schicken wir eine SQL-Anweisung an die Datenbank, die den Datensatz selektiert, der dem User entspricht, der sich gerade einloggen m?chte.
    Den Datensatz identifizieren wir durch die Kombination aus Usernamen und Passwort.
    Das Passwort steht aus Sicherheitsgr?nden nicht im Klartext in der Datenbank, sondern als md5-Verschl?sselung.
    PHP:
    <?php     
              // SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob 
              // diese Kombination von Usernamen und Passwort ?berhaupt existiert und 
              // zweitens bei Existenz Userinformationen auszulesen 
              $sql = "SELECT 
                               _id, 
                               _anzahlLogins 
                          FROM          
                               archiv_login 
                          WHERE 
                               _username = '" . trim($_POST['username']) . "' 
                          AND 
                               _passwort = '" . md5(trim($_POST['passwort'])) . "'";                            
              $res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /> 
                                                               <pre>' . $sql . '</pre> 
                                                               <br /> 
                                                               MySQL-Error: ' . mysql_error() ); 
    ?>

    Nun ist es nat?rlich m?glich, dass es keinen Datensatz mit der angegebenen Kombination aus Usernamen und Passwort gibt.
    In diesem Fall ist kein Datensatz selektiert worden.
    Sollte aus unvorhersehbaren Gr?nden mehr als einen selektierten Datensatz geben brechen wir den Login aus
    Sicherheitsgr?nden ab.
    Je nach Bedarf kann man sich f?r diesen Spezialfall noch etwas individuelles ausdenken.
    Wir fassen nun diese beiden F?lle allerdings zusammen.
    PHP:
    <?php 
              // Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt. 
              // In allen anderen F?llen wird er zur?ck zum Loginformular geleitet. 
              if( mysql_num_rows($res) != 1 ) { 
                  header( 'Location: http://localhost/loginfehler.html' );               
                  exit(); 
              } 
    ?>

    Der User wird also zur Datei "loginfehler.html" weitergeleitet, wenn er falsche Logindaten eingegeben hat. Auf diese Datei
    gehe ich sp?ter in diesem Tutorial ein, da sie nicht wirklich spannend ist

    Viel interessanter ist der Erfolgsfall. Der User hat sich also mit seinen richtigen Daten angemeldet.
    Der Login ist also erfolgreich.
    In diesem Fall wird die Session mit Informationen gef?llt. Als wichtigste Handlung wird die Variale $_SESSION['loggendIn']
    auf true gesetzt. So kann der User im passwortgesicherten Bereich als eingeloggt identifiziert werden.

    PHP:
    <?php 
                 // Der Schl?ssel 'loggedIn' erh?lt den Wert 'true'. So kann sp?ter ?berpr?ft werden, 
                 // ob der User eingeloggt ist oder nicht. 
                 $_SESSION['loggedIn'] = true; 
    ?> 
    [code]
    
    Als Zusatz f?llen wir die Session mit noch einigen weiteren userspezifischen Daten. 
    PHP: 
    [code]
    <?php 
    
                 // Die userspezifischen Daten werden ausgelesen und der Session hinzugef?gt 
                 $user = mysql_fetch_object($res); 
                 $_SESSION['anzahlLogins'] = $user->_anzahlLogins; 
                 $_SESSION['id'] = $user->_id; 
    ?>


    Nun k?nnen wir auch direkt die Anzahl der bisherigen Logins aktualisieren und damit den Login abschlie?en.
    Dieses Feature ist nat?rlich optional. Ich m?chte damit nur andeuten, dass diese Datei nat?rlich viel mehr machen kann,
    als nur die Logindaten zu ?berpr?fen
    PHP:
    <?php              
                 // Aktualisierung des Anzahl der Logins 
                 $sql = 'UPDATE 
                                  archiv_login 
                             SET 
                                  _anzahlLogins = _anzahlLogins + 1 
                             WHERE 
                                  _id = ' . $user->_id;                              
                 mysql_query($sql) or die( 'Error[UPDATE|User]: <br /> 
                                                              <pre>' . $sql . '</pre> 
                                                              <br /> 
                                                              MySQL-Error: ' . mysql_error() );
    ?>


    Als letzte Handlung dieser Datei wird der User jetzt nat?rlich noch zu einer Seite im gesch?tzten Bereich weitergeleitet.
    PHP:
    <?php 
                 // Der Login war erfolgreich und der User wird zur Startseite des 
                 // passwortgesch?tzen Bereichs weitergeleitet 
                 header( 'Location: http://localhost/geheim.php' ); 
                 exit();                                             
    ?>


    Kommen wir nun zu den restlichen Dateien, die uns noch fehlen, um ein geschlossenes System zu erhalten.
    Zun?chst trage ich noch die Datei "loginfehler.html" nach.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head><title>Fehler beim Login</title>
    <meta http-equiv="refresh" content="5; URL=http://localhost/loginformular.html"> 
    </head> 
    <body> 
        
       <h1>Es ist ein Fehler beim Login aufgetreten.</h1> 
       <p>Eventuell handelt es sich nur um einen Tippfehler. Bitte versuchen Sie es nochmals.</p> 
       Sie werden nach 5 Sekunden automatisch weitergeleitet.   
    </body> 
    </html>

    Ich denke nicht, dass ich da etwas zu sagen brauche. Die Weiterleitung erfolgt salopp gesagt per 'meta-refresh'.
    Dann wurde oben nat?rlich schon die Datei "geheim.php" verwendet. Da wird der User nach dem Login ja hingeleitet.
    Diese Datei bindet ganz zu Beginn eine weitere Datei ein.
    PHP:
    <?php 
    
        include_once 'checkLogin.inc.php';   
    ?> 
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head><title>Geheime Seite</title></head> 
    <body>   
       <h1>Das ist die <i>geheime</i> Seite</h1>    
       <p>Die Daten, die in der Session zum weiteren Gebrauch gespeichert sind:</p>    
       <?php     
           echo '<pre>'; 
           print_r($_SESSION); 
           echo '</pre>';     
       ?>    
       <p><a href="logout.php">Logout</a></p>        
    </body> 
    </html>

    Die Datei "checkLogin.inc.php" macht nur eine einzige Sache. Sie ?berpr?ft, ob die Session-Variable $_SESSION['loggendIn']
    mit true belegt ist oder nicht.
    Ist dies nicht der Fall, so wird der User zum Loginformular geschickt, da er ja nicht eingeloggt ist. Somit ist
    sichergestellt, dass nur eingeloggte User die Seite "geheim.php" zu sehen bekommen.
    Die Datei "checkLogin.inc.php" sieht somit folgenderma?en aus:
    PHP:
    <?php 
        session_start(); 
        if( !$_SESSION['loggedIn'] ) { 
            header( 'Location: http://localhost/loginformular.html' ); 
            exit(); 
        } 
    ?>


    Aber nochmal zur?ck zur Datei "geheim.php". In diesem Tutorial ist da nat?rlich nichts interessantes zu sehen.
    Es geht ja nur um das Prinzip. Allerdings erkennt man am Ende der Datei noch eine sehr wichtige und oft vergessene
    Funktionalit?t - den Logout.
    Klickt man auf den Link, so wird die Datei "logout.php" aufgerufen
    PHP:
    <?php 
         session_start(); 
         $_SESSION['loggedIn'] = false; 
         header( 'Location: http://localhost/loginformular.html' ); 
         exit(); 
    ?>


    Ich pers?nlich sehe das nicht so. Ich setze einfach die Variable $_SESSION['loggedIn'] auf false. Dadurch wird abgesichert,
    dass der User nach dem Logout nicht mehr in den gesch?tzen Bereich kann (das wird ja durch die Datei "checkLogin.inc.php"
    gew?hrleistet!) und die Session kann trotzdem noch weiterverwendet werden.

    Sinnvoll w?re es nat?rlich alle Session-Variablen, die irgendwas mit dem gesch?tzten Bereich zu tun haben zu l?schen.
    Aber es k?nnen sich ja auch andere Daten in der Session befinden.
    Das kann aber jeder f?r sich individuell entscheiden.



    loginformular.html 
    Code: 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
            "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
       <title>Login</title> 
    </head> 
    <body>    
        <h1>Loginformular</h1> 
        
          <form action="validateLogin.inc.php" method="post"> 
             <input type="text" name="username"> 
             <input type="password" name="passwort"> 
    
             <input type="submit" name="login" value="Einloggen"> 
          </form> 
    </body> 
    </html>


    validateLogin.inc.php
    PHP:
    <?php 
        session_start();     
        // ?berpr?fen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden. 
        if( isset($_POST['username'], $_POST['passwort']) 
            AND 
            strcmp(trim($_POST['username']),'') != 0 
            AND 
            strcmp(trim($_POST['username']),'') != 0 ) {           
              // Einbinden der Konfigurationsdatei 
              include_once 'config.inc.php';            
              // Erstellen der Verbindung zur MySQL-Datenbank 
              if( !$connection = mysql_connect( $_config['host'], $_config['user'], $_config['password'] ) ) { 
                   die( 'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' ); 
              } 
              if( !mysql_select_db( $_config['database'], $connection ) ) { 
                  die ( 'Die Datenbank ' . $_config['database'] . ' kann nicht verwendet werden. <br /> 
                           MySQL-Error: <br />' . mysql_error() ); 
              }            
              // SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob 
              // diese Kombination von Usernamen und Passwort ?berhaupt existiert und 
              // zweitens bei Existenz Userinformationen auszulesen 
              $sql = "SELECT 
                               _id, 
                               _anzahlLogins 
                          FROM          
                               archiv_login 
                          WHERE 
                               _username = '" . trim($_POST['username']) . "' 
                          AND 
                               _passwort = '" . md5(trim($_POST['passwort'])) . "'"; 
                                
              $res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /> 
                                                               <pre>' . $sql . '</pre> 
                                                               <br /> 
                                                               MySQL-Error: ' . mysql_error() ); 
                   
              // Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt. 
              // In allen anderen F?llen wird er zur?ck zum Loginformular geleitet. 
              if( mysql_num_rows($res) != 1 ) { 
                  header( 'Location: http://localhost/loginfehler.html' );               
                  exit(); 
              } 
              else { 
                 // Der Schl?ssel 'loggedIn' erh?lt den Wert 'true'. So kann ?berpr?ft sp?ter werden, 
                 // ob der User eingeloggt ist oder nicht. 
                 $_SESSION['loggedIn'] = true; 
                  
                 // Die userspezifischen Daten werden ausgelesen und der Session hinzugef?gt 
                 $user = mysql_fetch_object($res); 
                 $_SESSION['anzahlLogins'] = $user->_anzahlLogins; 
                 $_SESSION['id'] = $user->_id;               
                 // Aktualisierung des Anzahl der Logins 
                 $sql = 'UPDATE 
                                  archiv_login 
                             SET 
                                  _anzahlLogins = _anzahlLogins + 1 
                             WHERE 
                                  _id = ' . $user->_id;                               
                 mysql_query($sql) or die( 'Error[UPDATE|User]: <br /> 
                                                              <pre>' . $sql . '</pre> 
                                                              <br /> 
                                                              MySQL-Error: ' . mysql_error() );                                                              
                 // Der Login war erfolgreich und der User wird zur Startseite des 
                 // passwortgesch?tzen Bereichs weitergeleitet 
                 header( 'Location: http://localhost/geheim.php' ); 
                 exit();                                             
              }           
        } 
        else { 
              header( 'Location: http://localhost/loginformular.html' ); 
              exit(); 
        } 
    ?>


    loginfehler.html
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
            "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
       <title>Fehler beim Login</title> 
       <meta http-equiv="refresh" content="5; URL=http://localhost/loginformular.html"> 
    </head> 
    <body>     
       <h1>Es ist ein Fehler beim Login aufgetreten.</h1> 
       <p>Eventuell handelt es sich nur um einen Tippfehler. Bitte versuchen Sie es nochmals.</p> 
       Sie werden nach von 5 Sekunden automatisch weitergeleitet.     
    </body> 
    </html>

    geheim.php
    PHP:
    <?php 
        include_once 'checkLogin.inc.php';   
    ?> 
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
            "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
       <title>Geheime Seite</title> 
    </head> 
    <body>     
       <h1>Das ist die <i>geheime</i> Seite</h1>    
       <p>Die Daten, die in der Session zum weiteren Gebrauch gespeichert sind:</p>     
       <?php    
           echo '<pre>'; 
           print_r($_SESSION); 
           echo '</pre>';     
       ?> 
        
       <p><a href="logout.php">Logout</a></p>        
    </body> 
    </html>

    checkLogin.inc.php
    PHP:
    <?php 
        session_start(); 
    
        if( !$_SESSION['loggedIn'] ) { 
            header( 'Location: http://localhost/loginformular.html' ); 
            exit(); 
        } 
    ?>


    logout.php
    PHP:
    <?php 
         session_start(); 
         $_SESSION['loggedIn'] = false; 
    
         header( 'Location: http://localhost/loginformular.html' ); 
         exit(); 
    ?>


    SQL-Export
    # 
    # Table structure for table `archiv_login` 
    # 
    
    CREATE TABLE `archiv_login` ( 
      `_id` int(4) NOT NULL auto_increment, 
      `_username` varchar(50) NOT NULL default '', 
      `_passwort` varchar(35) NOT NULL default '', 
      `_anzahlLogins` int(7) NOT NULL default '1', 
      PRIMARY KEY  (`_id`), 
      KEY `_username` (`_username`) 
    ) TYPE=MyISAM AUTO_INCREMENT=3 ; 
    
    # 
    # Dumping data for table `archiv_login` 
    # 
    
    <?php 
    
        // Array initialisieren ... 
        $_config = array(); 
    
        // ... und mit Werten f?llen 
    
        // Der Datenbankserver. 
        $_config['host'] = 'localhost';   
    
        // Ein User, der auf den Server zugreifen darf. 
        $_config['user'] = 'user';         
    
        // Das zum User passende Passwort. 
        $_config['password']  = 'password'; 
    
        // Der Name der Datenbank, die auf dem Datenbankserver angesprochen werden soll. 
        $_config['database'] = 'database'; 
    
    ?>


    Beitrag ge?ndert am 18.07.2006 13:33 von pit62
  5. Autor dieses Themas

    personalstereo

    personalstereo hat kostenlosen Webspace.

    danke, damit kann ich doch schon mal was anfangen!

    btw nn google posts! auf die idee komm ich schon selbst, aber wollte mich mal im forum umh?ren, weil man bei lima-city ja kein .htaccess benutzen kann. ich werde mich jetzt mal mit einem script besch?ftigen


    danke ihrs
  6. Hier auch ein ganz einfaches:

    formular.php
    <? include("#zugang.php"); ?>
    
    <html>
    <head></head>
    <body>
    <form method="post" action="formular.php">
      Username: <input name="user"><br>
      Kennwort: <input name="pass" type="password"><br>
      <input type= "submit" value="OK">
    </form>
    
    <?
      $user = $_POST['user'];
      $pass = $_POST['pass'];
      if ($user == $user_ok && $pass == $pass_ok) include("#geheim.inc");
      else echo "Falsche Eingabe!";
    ?>
    
    </body>
    </html>



    zugang.php

    <?
      $user_ok = "Nilpferd";
      $pass_ok = "hippo1";
    ?>


    #geheim.inc:
    <hr>
    <h1>Guten Tag,</h1>
    <p>diese Webseite wird nur nach Eingabe des Benutzernamens <?= $user_ok;?> und des Kennwortes <?= $pass_ok; ?> angezeigt.</p>
  7. Ich w?rde diese Angaben, noch escapen, sch?tzt vor mysql_injection
    Beispiel:
    ....
    include 'sicherheit.php';
    $pw = sha1($_POST['pw']);;
    $us = $_POST['user'];
    
    $neupw = mysql_string($pw);
    $neuus = mysql_string($us);
    ....


    sicherheit.php
    function mysql_string($string)
    {   
        if (get_magic_quotes_gpc())
        {
            $string = stripslashes($string);
        }
        return "'".mysql_real_escape_string($string)."'";
    }

  8. Autor dieses Themas

    personalstereo

    personalstereo hat kostenlosen Webspace.

    sehr nett von euch, bisher hatte ich nur wenig zeit mich genug damit zu besch?ftigen, aber ich denke dieses wochenende werde ich die zeit daf?r finden!

    thanks
  9. Autor dieses Themas

    personalstereo

    personalstereo hat kostenlosen Webspace.

    so hab meinen login

    nochmal danke an die helfer...
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!