timestamp bzw. time() .... läuft nicht so wie ich will :(

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

  • timestamp bzw. time() .... läuft nicht so wie ich will :(

    Hi,

    also...ich bin gerade an nem LoginScript für n Adminbereich dran. Alles kein Problem, läuft wunderbar, nur würde ich gerne jetzt eine Funktion einbauen, das man nach einer bestimmten Anzahl (in dem Fall 3) fehlgeschlagener Login-Versuche für eine bestimmte Zeit gesperrt wird. Das ganze läuft mit MySQL.

    Irgendwie funzt das aber net so wie ich möchte, d.h. die Anzahl der Login-Versuche werden in der Datenbank so wie es soll gespeichert, aber nach x Loginversuchen soll eine Sperrzeit in die Spalte "sperre" gespeichert werden, die sich von time()+sperrzeit
    ableitet.....GEHT ABER NET.... Ich bekomm auch keine Fehlermeldung....ich kann fröhlich 50 mal das falsche Passwort eingeben ohne das was passiert..... wenn ich dann das richtige eingebe komme ich halt ganz normal in den geschützen Bereich...
    lange rede kurzer Sinn....ich poste am besten mal das Loginscript, vielleicht kann mir jemand weiterhelfen oder eine bessere Variante vorschlagen .... THX !


    Code:
    session_start();
    
    require("$DOCUMENT_ROOT/inc/config.inc.php");
    require("$DOCUMENT_ROOT/inc/functions.inc.php");
    
    $timestamp=time()+3600;
    $maxloginversuche=3;
    $sperrzeit="7200"; // Sekunden!
    
    if ( $username == ""  || $passwort == "" )
    {
    $error="noinput";
    include("$DOCUMENT_ROOT/inc/error.inc.php");
    die;
    }
    
    conn_db();
    
    $query = "SELECT name, pass, logver, sperre, level, lastlogin  FROM dlm_admins WHERE name = '".$username."'";
    $result = mysql_query($query,$connect);
    
    $pruefen = mysql_fetch_array($result,MYSQL_ASSOC);
    
    $pass=$pruefen[pass];
    $gesperrt=$pruefen[sperre];
    $logincount=$pruefen[logver];
    
    if (!$pruefen)
    {
    $error="nousername";
    include("$DOCUMENT_ROOT/inc/error.inc.php");
    die;
    }
    
    if ($pass <> $passwort)
    {
        if ( $timestamp < $gesperrt ){
            $error="sperre";
            include("$DOCUMENT_ROOT/inc/error.inc.php");
            die;
        }
        elseif ( $timestamp > $gesperrt ){
            if (! $gesperrt == "0"){
            $deletesperre = "UPDATE dlm_admins SET sperre='0' WHERE name='".$username."'";
            mysql_query( $deletesperre, $connect );
        }
            $logver=$logincount+1;
            $set_errorcounter = "UPDATE dlm_admins SET logver='$logver' WHERE name='".$username."'";
            mysql_query( $set_errorcounter, $connect );
            $error="passworterror";
            include("$DOCUMENT_ROOT/inc/error.inc.php");
            die;
    }
        if ( $gesperrt == "0" ){
            $logver=$logincount+1;
            $set_errorcounter = "UPDATE dlm_admins SET logver='$logver' WHERE name='".$username."'";
            mysql_query( $set_errorcounter, $connect );
            if ($logver>=$maxloginversuche-1){
                $sperrzeit=time()+$sperrzeit+3600;
                $set_sperre = "UPDATE dlm_admins SET sperre='$sperrzeit' WHERE name='".$username."'";
                mysql_query( $set_sperre, $connect );
                $reset_counter = "UPDATE dlm_admins SET logver='0' WHERE name='".$username."'";
                mysql_query( $reset_counter, $connect );
                $error = "newsperre";
                include("$DOCUMENT_ROOT/inc/error.inc.php");
                die;
            }
            $error = "passworterror";
            include("$DOCUMENT_ROOT/inc/error.inc.php");
        }
    die;
    }
    
    if ($pass == "$passwort"){
        if ($timestamp < $gesperrt){
            $error="sperre";
            include("$DOCUMENT_ROOT/inc/error.inc.php");
            die;
        }
        elseif ($timestamp > $gesperrt){
            $reset_sperre = "UPDATE dlm_admins SET sperre='0' WHERE name='".$username."'";
            mysql_query( $reset_sperre, $connect );
            $reset_counter = "UPDATE dlm_admins SET logver='0' WHERE name='".$username."'";
            mysql_query( $reset_counter, $connect );
        }
    }
    
    $datum=date("d.m.Y");
    $uhrzeit=date("H:i");
    
    $query2 = "UPDATE dlm_admins SET lastlogin='$datum, um $uhrzeit Uhr' WHERE name='".$username."'";
    mysql_query( $query2, $connect )
    or die ( "Konnte nicht in Datenbank schreiben: ".mysql_error() );
    mysql_close( $connect );
    
    $level = $pruefen["level"];
    $lastlogin = $pruefen["lastlogin"];
    
    session_register('username');
    session_register('passwort');
    session_register('level');
    session_register('lastlogin');
    
    header ("Location:start.php");


    Wegen dem Problem ist jetzt schon zimlich viel drin gepfuscht, hoffe ihr könnt das auch so entziffern
    -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

  • #2
    Vielleicht funz das besser. Änderungen ohne Gewähr, jkanns ja nicht testen, aber im Ansatz sollte es in etwa hinkommen. Hab das Skript ein wenig ausgemistet
    PHP-Code:
    session_start();

    require(
    "$DOCUMENT_ROOT/inc/config.inc.php");
    require(
    "$DOCUMENT_ROOT/inc/functions.inc.php");

    $timestamp         time()+3600;
    $maxloginversuche  3;
    $sperrzeit         7200// Sekunden!

    if ($username == ""  || $passwort == "") {
        
    $error="noinput";
        include(
    "$DOCUMENT_ROOT/inc/error.inc.php");
        die();
    }

    conn_db();

    $query "SELECT name, pass, logver, sperre, level, lastlogin  FROM dlm_admins WHERE name = '$username'";
    $result mysql_query($query,$connect);

    $pruefen mysql_fetch_array($result,MYSQL_ASSOC);

    $pass        $pruefen[pass];
    $gesperrt    $pruefen[sperre];
    $logincount    $pruefen[logver];  // Kann man weglassen

    if (!$pruefen) {
        
    $error "nousername";
        include(
    "$DOCUMENT_ROOT/inc/error.inc.php");
        die();
    }


    if (
    $pass <> $passwort) {

        
    $error "passworterror";
        
    $set_errorcounter "UPDATE dlm_admins SET logver=logver+1 WHERE name='$username'";
        
    mysql_query($set_errorcounter$connect);

        if (
    $timestamp $gesperrt){
            
    $error "sperre";
            include(
    "$DOCUMENT_ROOT/inc/error.inc.php");
            die(); 
    // Hier stirbt Script elseif nicht notwendig
        
    }

        if (
    $logver >= $maxloginversuche-1){
            
    $sperrzeit time() + $sperrzeit 3600;
            
    $set_sperre "UPDATE dlm_admins SET sperre='$sperrzeit', logver='0' WHERE name='$username'";
            
    mysql_query($set_sperre$connect);
            
    $error "newsperre";
            include(
    "$DOCUMENT_ROOT/inc/error.inc.php");
            die(); 
    // Script stirbt
        
    }

        include(
    "$DOCUMENT_ROOT/inc/error.inc.php");
        die(); 
    // Hier stirbt Script elseif nicht notwendig
    }

    if (
    $timestamp $gesperrt){
        
    $error="sperre";
        include(
    "$DOCUMENT_ROOT/inc/error.inc.php");
        die(); 
    // Hier stirbt Script elseif nicht notwendig
    }

    $reset_sperre "UPDATE dlm_admins SET sperre='0', logver='0' WHERE name='$username'";
    mysql_query($reset_sperre$connect);

    $datum=date("d.m.Y");
    $uhrzeit=date("H:i");

    $query2 "UPDATE dlm_admins SET lastlogin='$datum, um $uhrzeit Uhr' WHERE name='$username'";
    mysql_query($query2$connect)
    or die (
    "Konnte nicht in Datenbank schreiben: ".mysql_error());
    mysql_close($connect);

    $level $pruefen["level"];
    $lastlogin $pruefen["lastlogin"];

    session_register('username');
    session_register('passwort');
    session_register('level');
    session_register('lastlogin');

    header ("Location:start.php"); 

    Kommentar


    • #3
      Danke !

      Ich danke dir für deine Mühe !

      Leider funzt das so immer noch net.......Das Problem ist nach wie vor das gleiche.... Loginversuche werden korrekt gezählt... aber nach 3 wird nicht reagiert....in der Datenbank können 40 Loginversuche stehen..... das mit dem Eintragen der Sperre läuft nicht. Ich bin mit meinem Latein am Ende

      Es muss doch Möglich sein, das wenn das Script den 3 Fehllogin einträgt auch gleich den aktuellen Timestamp + 7200 einträgt....das gibbet doch net ........
      Zuletzt geändert von ZuLtAn; 23.03.2002, 11:25.
      -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

      Kommentar


      • #4
        Wozu hast Du den Offset von 3600?

        Display einmal vor der PWD-Abfrag <> die einzelnen Zeiten. $timestamp sowie $gesperrt.

        Kommentar


        • #5
          ähm ???

          Wie jetzt ?? time() gibt doch die aktuelle UnixZeit zurück oder irre ich jetzt ?? Und Sperrzeit ist time()+7200 (Also Zeit + 7200 Sekunden).

          Oder hab ich dich jetzt falsch verstanden ???
          -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

          Kommentar


          • #6
            mal getestet....

            Also ich hab mal n kurzes testscript geschrieben um zu sehen ob die funktion time() bei mir auf m local server überhaupt funzt...

            [code]
            <?

            $sperrzeit = time()+7200;
            $currenttime = time();

            echo "Die aktuelle time() ist $currenttime <br>"
            ."Die Sperrzeit wäre dann $sperrzeit";

            ?>

            Ausgabe :

            Die aktuelle time() ist 1016885783
            Die Sperrzeit wäre dann 1016892983


            Also alles i.o

            Ich müsste doch dann theoretisch nur noch (wie ich es ja schon gemacht habe) die beiden Zeiten zu vergleichen....

            Das Prob ist ja nur, das es gar nicht erst in die Spalte sperre eingetragen wird..... ohne eintrag keine überprüfung
            -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

            Kommentar


            • #7
              Habe das hier bei drweb.de gefunden. Vieleicht hilft es dir ja.
              hier die URL dazu http://www.ideenreich.com/programmierung/php_8.shtml

              PHP-Code:
              <?php
              // Grundeinstellungen für MySQL
              $mysqlhost="localhost";
              $mysqluser="mysql-user";
              $mysqlpw="mysql-passwort";
              $datenbank="datenbankname";

              // Sonstige Grundeinstellungen
              $maxloginversuche="3";
              $sperrzeit="86400"// Sekunden!

              $connect=mysql_connect($mysqlhost,$mysqluser,$mysqlpw);
              mysql_select_db($datenbank,$connect);

              // Position 1:
              $sql="SELECT * FROM userdaten WHERE user='$usereingabe'";
              $ergebnis=mysql_query($sql$connect);
              while(
              $row=mysql_fetch_object($ergebnis))
              {
              $user=$row->user;
              $password=$row->password;
              $timetoon=$row->timetoon;
              $logver=$row->logver;
              }
              mysql_free_result($ergebnis);

              // Position 2:
              $timestamp=time()+3600;
              if ((
              $timetoon>$timestamp) && ($usereingabe))
              {
              $sperrzeit=gmdate("H:i:s",$timetoon);
              $sperrdatum=gmdate("d.m.Y",$timetoon);
              echo 
              "Du bist noch bis zum ".$sperrdatum." um ".$sperrzeit." gesperrt!";
              mysql_close($connect);
              exit;
              }

              // Position 3:
              if (($password==$pweingabe) && ($user==$usereingabe))
              {

              // Position 4:
              $timestamp=time()-3600;
              $sql="UPDATE userdaten SET logver='0' WHERE user='$usereingabe'";
              $ergebnis=mysql_query($sql$connect);
              $sql="UPDATE userdaten SET timetoon='$timestamp' WHERE user='$usereingabe'";
              $ergebnis=mysql_query($sql$connect);
              mysql_close($connect);
              ?>

              Hier ist die geschützte Seite...

              <?
              exit;
              }
              else
              {
              echo "Oooops! Entweder ist Dein Passwort oder Benutzername falsch...";

              // Position 5:
              $logver++;
              $sql="UPDATE userdaten SET logver='$logver' WHERE user='$usereingabe'";
              $ergebnis=mysql_query($sql, $connect);
              if ($logver>=$maxloginversuche-1)
              {

              // Position 6:
              $sperrzeit=time()+$sperrzeit+3600;
              $sql="UPDATE userdaten SET timetoon='$sperrzeit' WHERE user='$usereingabe'";
              $ergebnis=mysql_query($sql, $connect);

              // Position 7:
              $logver="0";
              $sql="UPDATE userdaten SET logver='$logver' WHERE user='$usereingabe'";
              $ergebnis=mysql_query($sql, $connect);
              }
              mysql_close($connect);
              exit;
              }
              ?>
              *winks*
              Gilbert
              ------------------------------------------------
              Hilfe für eine Vielzahl von Problemen!!!
              http://www.1st-rootserver.de/

              Kommentar


              • #8
                Ich glaube dies hier is das Problem
                if ($logver>=$maxloginversuche-1){
                $logver ist doch gar nicht gesetzt oder hab ich das übersehen...
                Wenn dann wird die if bedingung nie wahr und Sperrzeit nicht eingetragen
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9


                  Dieses Tut habe ich ja zum erstellen zur Hilfe genommen....nur leider verteilt dieses Tut den Code über zwei Seiten, ich will es über 1 Seite machen (wegen den Sessions...) ....ist ja im Prinzip das gleiche ... wenns funktionieren würde
                  -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

                  Kommentar


                  • #10
                    @MelloPie

                    STIMMT ! total übersehen werds gleich mal probieren .....*hoff*
                    THX !
                    -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

                    Kommentar


                    • #11
                      ES FUNZT !

                      Ja, Ja, Ja.... es funzt *freu*
                      echt simpel, aber wenn man blind ist *g*

                      THX !!!
                      -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

                      Kommentar


                      • #12
                        Poste doch mal das geänderte und funktionierende Script. Damit wir alle was von haben.
                        *winks*
                        Gilbert
                        ------------------------------------------------
                        Hilfe für eine Vielzahl von Problemen!!!
                        http://www.1st-rootserver.de/

                        Kommentar


                        • #13
                          Script

                          Oki...hier mal das Script.....muss für den einen oder anderen halt angepasst werden, da ich z.B. mit Sessions arbeite ...


                          PHP-Code:
                          session_start();
                          require(
                          "$DOCUMENT_ROOT/inc/config.inc.php");
                          require(
                          "$DOCUMENT_ROOT/inc/functions.inc.php");

                          // Variablen deklarieren
                          $timestamp         time()+3600;
                          $maxloginversuche  3;
                          $sperrzeit         7200// Sekunden!

                          // Wenn Username - oder Passworteingabe fehlt, Errorausgabe und Abrechen
                          if ($username == ""  || $passwort == "") {
                              
                          $error="noinput";
                              include(
                          "$DOCUMENT_ROOT/inc/error.inc.php");
                              die();
                          }

                          // Mit Datenbank verbinden (in Funktion)
                          conn_db();


                          //Daten auslesen und in Array speichern
                          $query "SELECT name, pass, logver, sperre, level, lastlogin  FROM dlm_admins WHERE name = '$username'";
                          $result mysql_query($query,$connect);

                          $pruefen mysql_fetch_array($result,MYSQL_ASSOC);

                          // Arraydaten in Variablen speichern
                          $pass        $pruefen[pass];
                          $gesperrt    $pruefen[sperre];
                          $logincount    $pruefen[logver];

                          // Wenn Username nicht vorhanden, Fehler u. Abbrechen
                          if (!$pruefen) {
                              
                          $error "nousername";
                              include(
                          "$DOCUMENT_ROOT/inc/error.inc.php");
                              die();
                          }


                          // Wenn Passwort nicht stimmt
                          if ($pass <> $passwort) {

                              
                          $error "passworterror"//Errorausgabe festlegen
                                                        //die Fehlermeldungen sind in einer error.inc.php
                              

                              //Den Logincounter in der Datenbank um 1 erhöhen
                              
                          $set_errorcounter "UPDATE dlm_admins SET logver=logver+1 WHERE name='$username'";
                              
                          mysql_query($set_errorcounter$connect);

                              
                          // Überprüfen, ob User schon gesperrt ist
                              
                          if ($timestamp $gesperrt){
                                  
                          $error "sperre";
                                  include(
                          "$DOCUMENT_ROOT/inc/error.inc.php");
                                  die();
                              }

                              
                          // Wenn der Logincounter auf 3 steht, neue Sperrzeit für User speichern
                              
                          if ($logincount >= $maxloginversuche-1){
                                  
                          $sperrzeit time() + $sperrzeit 3600;
                                  
                          $set_sperre "UPDATE dlm_admins SET sperre='$sperrzeit', logver='0' WHERE name='$username'";
                                  
                          mysql_query($set_sperre$connect);
                                  
                          $error "newsperre";
                                  include(
                          "$DOCUMENT_ROOT/inc/error.inc.php");
                                  die(); 
                          // Script stirbt
                              
                          }

                              
                          //Ansonsten normalen Passwortfehler augeben
                              
                          include("$DOCUMENT_ROOT/inc/error.inc.php");
                              die(); 
                          // Hier stirbt Script
                          }

                          //Bei richtigen Logindaten trotzdem auf Sperrzeit
                          //prüfen und gegf. Fehler ausgeben
                          if ($timestamp $gesperrt){
                              
                          $error="sperre";
                              include(
                          "$DOCUMENT_ROOT/inc/error.inc.php");
                              die(); 
                          // Hier stirbt Script
                          }

                          // Wenn alles ok, Speerzeit und Logincounter sichherheitshalber auf '0' sezten
                          $reset_sperre "UPDATE dlm_admins SET sperre='0', logver='0' WHERE name='$username'";
                          mysql_query($reset_sperre$connect);

                          // Ab hier gehts dann weiter mit dem geschützen Bereich

                          //Beispiel
                          header ("Location:start.php"); 


                          Grüsse
                          ZuLtAn
                          Zuletzt geändert von ZuLtAn; 24.03.2002, 16:40.
                          -=Es gibt Leute, die können Ihren Stammbaum bis zu denen zurückverfolgen, die noch darauf saßen=-

                          Kommentar


                          • #14
                            $logincount = $pruefen[logver]; // Kann man weglassen

                            Der Kommentar // Kann man weglassen ist jetzt irreführend. Nach Deiner Änderung muß diese Zeile belassen werden. Später im Skript wird nun der Wert der Variable benötigt:

                            if ($logincount >= $maxloginversuche-1){

                            Wenn Du den Code zwische [php ] und [/php ] stellst , ohne blank vor ], wird der Code farbig angezeigt und ist u.u. leichter zu lesen.

                            Kommentar

                            Lädt...
                            X