Loginscript funktioniert nicht richtig

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

  • Loginscript funktioniert nicht richtig

    Hallo zusammen,

    Folgendes passiert wenn mehr wie ein gültiges Passwort in der check_access.txt vorhanden ist, dann wird das neuste Passwort nicht akzeptiert, was mache ich falsch?
    Des weiteren würde ich gern auch in dem Script den Befehl dazu geben, die abgelaufenen Passwörter zu löschen.

    login.php
    PHP-Code:
    <?php
    $handle 
    fopen ("check_access.txt""r");
    $time time();
    $t_access 2*60*60// nach zwei stunden verfällt das passwort
    while ( $inhalt fgets ($handle4096 ))
    {
        
    $inhalt trim $inhalt );

        if ( 
    trim ($inhalt) > $time-$t_access)
        {
            
    ini_set("session.use_cookies""0");
            if (
    $_POST["user"]=="benutzer" && $_POST["passwd"]=="$inhalt") {
                
    session_name('sid');
                
    session_start();
                
    $_SESSION["user"]=$_POST["user"];
                
    $_SESSION["VERIFIED"]=true;
                
    $_SESSION["REMOTE_ADDR"] = $_SERVER["REMOTE_ADDR"];
                
    Header('Location: /data.php?sid='.session_id());
            } else {
                
    Header('Location: /index.php?access=denied');
            }
            exit;
        }
    }
    fclose($handle);
    Header('Location: /index.php?access=denied');
    ?>
    check_access.txt
    PHP-Code:
    1207037480
    1207045736
    1207046105
    1207048792
    1207056376 
    Ich hoffe, dass mir da jemand weiter helfen kann, denn ich such schon ne ganze Weile nach einer Lösung.

    Danke schon mal für eure Hilfe und Unterstützung...
    Zuletzt geändert von 23isall; 02.04.2008, 03:46.

  • #2
    Ich habe den Code überarbeitet, aber immer noch keine Lösung gefunden:

    PHP-Code:
    <?php
    $handle 
    fopen('check_access.txt''r');
    $time time()-2*60*60;
    while (!
    feof($handle))
    {
        
    $content fgets($handle11);
        
    $content trim($content);
        if (
    $content $time)
        {
            if (isset(
    $_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == "$content"))
            {
                
    ini_set('session.use_cookies''0');
                
    session_name('sid');
                
    session_start();
                
    $_SESSION['user'] = isset($_POST['user']);
                
    $_SESSION['VERIFIED'] = true;
                
    $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
                
    Header('Location: /data.php?sid='.session_id());
            }
            else
            {
                
    Header('Location: /index.php?access=denied');
            }
            exit;
        }
    }
    fclose($handle);
    Header('Location: /index.php?access=denied');
    ?>
    Ich vermute, dass der Fehler an der If-Bedingung: "[COLOR=firebrick]if ($content > $time)[/COLOR]" liegt.
    Es kommt mir so vor, als würde das Script beim ersten Ergebnis eines gültigen Passwortes alle weiteren Passwörter die ebenfalls Gültig sind ignorieren.
    Die abgelaufenen Passwörter werden Korrekt erkannt.
    Kann mir da jemand einen Gedankenstoß geben?
    Zuletzt geändert von 23isall; 02.04.2008, 06:03.

    Kommentar


    • #3
      Es kommt mir so vor, als würde das Script beim ersten Ergebnis eines gültigen Passwortes alle weiteren Passwörter die ebenfalls Gültig sind ignorieren.
      Nachdem das erste mal Deine Bedingung erfüllt ist, wird in deinem Code weitergeleitet. Warum willst Du weitere gültige Passwörter checken?
      Code:
      Header('Location: /data.php?sid='.session_id());
      noch 2 Fragen:
      - warum speicherst Du Passworte in einer txt datei, die man im Klartext auslesen könnte?
      - heissen alle Deine user "benutzer"?
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        btw. immer wenn das erste mal ein Wert grösser als dein $time ist wird weitergeleitet
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Hallo MelloPie,

          Warum willst Du weitere gültige Passwörter checken?
          Weil man ein Passwort anfordern kann, was dann in der check_access.txt abgelegt wird.
          Ist es denn möglich, auch das zweite Passwort usw. zu akzeptieren und nicht die anderen, die gültig sind zu ignorieren?


          heissen alle Deine user "benutzer"?
          Erst mal ja.

          warum speicherst Du Passworte in einer txt datei?
          Weil sie auserhalb des webroots im Ordner files liegt sowie die login.php.

          Kommentar


          • #6
            Ich halte das zwar für ziemlich umständlich aber is Dein Ding. Denn Du hast damit eigentlich ein Sicherheitsproblem.

            Aber gut, mach folgendes:
            Du gehst immer alle Zeilen Deiner Datei durch und nur wenn ein Passwort stimmt, dann leitest Du weiter auf die
            Header('Location: /data.php?sid='.session_id());

            Nach deiner Schleife leitest Du weiter auf
            Header('Location: /index.php?access=denied');

            Das bedeutet zwar dass der NUtzer nur irgendein gueltiges Passwort eingegben muss, aber das scheint ja genau das zu sein was Du möchtest, allerdings würde ich je nach Sicherheitsverlangen das Loginsystem personalisieren und sicherer gestalten.
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              @23isall POste Deine Fragen hier und schicke bitte keine Mails.

              Dein Script macht folgendes:

              beim ersten Satz bei dem die Bedingung if ($content > $time) wahr ist wird weitergeleitet. Das heisst im Klartext, das erste gueltige Passwort wird verglichen, kein weiteres.

              Deswegen leite erst nach der while (!feof($handle)) schleife weiter auf Header('Location: /index.php?access=denied');
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                Setze ein Kontrollvariable statt direkt weiterzuleiten und prüfe diese am Ende des Scripts
                PHP-Code:
                <?php
                $handle 
                'check_access.txt';
                $time time()-2*60*60;
                $bool false;
                foreach (
                file($handle) as $wert)
                {
                    if (
                $wert $time){
                        if (isset(
                $_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == $wert)){
                            
                $bool true;
                        }else{
                            
                $bool false;
                        }
                    }
                }
                if(
                $bool === false){
                  
                Header('Location: /index.php?access=denied');
                }else{
                  
                ini_set('session.use_cookies''0');
                  
                session_name('sid');
                  
                session_start();
                  
                $_SESSION['user'] = isset($_POST['user']);
                  
                $_SESSION['VERIFIED'] = true;
                  
                $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
                  
                Header('Location: /data.php?sid='.session_id());
                }
                ?>
                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  @MelloPie,

                  Sorry für die Mail, aber ich war mir nicht sicher, ob ich oder du mich richtig verstanden hast. Wird nicht wieder vorkommen.

                  Gruß Micha ;-)


                  @jahlives,

                  Ich habe das Script getestet, leider funktioniert es immer noch nicht richtig.
                  Wenn ich aber [COLOR=darkred]trim()[/COLOR] nutze, wird wenigstes das letzte gültige Passwort erkannt und korrekt weitergeleitet.

                  PHP-Code:
                  <?php
                  $handle 
                  'check_access.txt';
                  $time time()-2*60*60;
                  $bool false;
                  foreach (
                  file($handle) as $wert)
                  {
                      
                  $wert trim($wert);
                      if (
                  $wert $time) {
                          if (isset(
                  $_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == $wert)) {
                              
                  $bool true;
                          }
                          else {
                              
                  $bool false;
                          }
                      }
                  }
                  if(
                  $bool === false) {
                      
                  Header('Location: /index.php?access=denied');
                  }
                  else {
                      
                  ini_set('session.use_cookies''0');
                      
                  session_name('sid');
                      
                  session_start();
                      
                  $_SESSION['user'] = isset($_POST['user']);
                      
                  $_SESSION['VERIFIED'] = true;
                      
                  $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
                      
                  Header('Location: /data.php?sid='.session_id());
                  }
                  ?>

                  Kommentar


                  • #10
                    Ich hab es mal mit [COLOR=darkred]error_reporting(E_ALL);[/COLOR] versucht, es werden keine Fehler angezeigt, des weiteren wollte ich wissen, was die Variable [COLOR=darkred]$bool[/COLOR] ausspuckt.
                    Ist das letzte Passwort gültig, steht in der Variable [COLOR=darkred]$bool[/COLOR] der Wert: [COLOR=darkred]1[/COLOR]
                    Wird das vorletzte Passwort eingegeben, was auch Gültig ist, steht in der Variable [COLOR=darkred]$bool[/COLOR] kein Wert und es wird zu [COLOR=darkred]Header('Location: /index.php?access=denied');[/COLOR] weitergeleitet.
                    Dies passiert auch bei Passwörtern die nicht mehr Gültig sind, dass ist ja so Korrekt.

                    PHP-Code:
                    <?php
                    error_reporting
                    (E_ALL);
                    $handle 'check_access.txt';
                    $time time()-2*60*60;
                    $bool FALSE;
                    foreach (
                    file($handle) as $wert)
                    {
                        
                    $wert trim($wert);
                        if (
                    $wert $time && isset($_POST['user']) && $_POST['user'] == 'benutzer' && (isset($_POST['passwd']) && $_POST['passwd'] == $wert)) {
                                
                    $bool TRUE;
                            }
                            else {
                                
                    $bool FALSE;
                            }
                        }
                    if(
                    $bool === FALSE) {
                    //    Header('Location: /index.php?access=denied');
                    echo $bool;
                    }
                    else {
                        
                    ini_set('session.use_cookies''0');
                        
                    session_name('sid');
                        
                    session_start();
                        
                    $_SESSION['user'] = isset($_POST['user']);
                        
                    $_SESSION['VERIFIED'] = TRUE;
                        
                    $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
                    //    Header('Location: /data.php?sid='.session_id());
                    echo $bool;
                    }
                    ?>
                    Zuletzt geändert von 23isall; 02.04.2008, 21:25.

                    Kommentar


                    • #11
                      Ist das letzte Passwort gültig, steht in der Variable $bool der Wert: 1
                      Wird das vorletzte Passwort eingegeben, was auch Gültig ist, steht in der Variable $bool kein Wert
                      Dann ist dein PHP kapputt Weil die Werte weder 1 noch nichts sind. Sondern true oder false. Wenn man Variablen prüfen will bietet sich eine Funktion wie var_dump() an.

                      Gruss

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Hallo Tobi,


                        Erst mal danke, dass du mir überhaupt hilfst
                        Nur bin ich ein Newbi, was PHP betrifft, aus diesem Grund wende ich mich an dieses Froum in der Hoffung, dass mir jemand weiter helfen kann.

                        Kommentar


                        • #13
                          @ Tobi,

                          Danke für den Hinweis auf; [COLOR=darkred]var_dump()[/COLOR].
                          Hast du denn noch eine Idee wie ich das Script auf korrekte Funktion hinbekomme?

                          Kommentar


                          • #14
                            Mal meine Fragen:
                            -Was genau steht in der Textdatei? Zeitstempel oder Passworte?
                            -Falls Zeitstempel: Bist du sicher, dass die nur maximal 2 Stunden als sind?
                            -Muss der User als Passwort wirklich die Nummer so eigeben?
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              Zu Frage 1:
                              In der check_access.txt steht wie folgt nur das Passwort, dass aus Time Generiert wird:

                              check_access.txt
                              PHP-Code:
                              1207225603
                              1207226446
                              1207226572
                              1207227865
                              1207227889
                              1207227974 
                              Gut, man könnte das ja auch mit der Übergabe der IP in Form von:
                              80.121.240.132|1207227974
                              Überprüfen. Aber ich war zuerst mal Froh, dass ich einen Ansatz gefunden habe, was leider nicht funktionierte.

                              Zu Frage 2:
                              Das Passwort wird über Mail verschickt, dass habe ich ja so weit auch hinbekommen und sollte mit [COLOR=darkred]$time = time()-2*60*60;[/COLOR] auf Gültigkeit geprüft werden.

                              Zu Frage 3:
                              Ja, der User muss das genauso eintragen, es soll halt nur ein Temporäres Passwort sein.
                              Zuletzt geändert von 23isall; 03.04.2008, 15:51.

                              Kommentar

                              Lädt...
                              X