Loginscript funktioniert nicht richtig

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

  • #16
    1207227974
    Also muss der User diese Zahl als gültiges PW angeben?
    In der check_access.txt steht wie folgt nur das Passwort, dass aus Time Generiert wird
    Dann ist das also ein Timestamp?
    Wenn ja hast du geprüft dass diese alle innerhalb 2h von der aktuellen Zeit aus liegen?

    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


    • #17
      Zu Frage 1:
      Ja genau.

      Zu Frage 2:
      Mal ein Codeschnipsel wie der Timestamp eingetragen wird:
      PHP-Code:
      $time time();
      $handle fopen ("check_access.txt""a+");
      fwrite($handle$time);
      fwrite($handle"\r\n");
      fclose($handle); 
      Nach diesem Eintrag bekommt der User die Mail zugeschickt, in der das Passwort ist. Ab diesem zeitpunkt hat er 2 Stunden zugang.

      Kommentar


      • #18
        Und was ist denn jetzt noch dein Problem? Der Vergleich scheint zu funzen, sonst wäre $bool nicht auf einmal true gewesen...
        Aber mal ehrlich, warum kann der User nicht einfach das Passwort auswählen wie er will? In die Datei könntest du dann folgendes schreiben
        Code:
        //Username Passwort Zeit
        anton;totalGeheim;12305444
        beat;nichtSoGeheim;1230544
        am besten dazu die Passworte als md5-Hashes speichern und nicht im Klartext
        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


        • #19
          Nehmen wir mal an: Ein User holt sich ein Passwort, dann ist dieses 2 Stunden gültig. In dieser Zeit wo das Passwort gültig ist, holt sich ein anderer User ein Passwort für 2 Stunden, dann wird das vorige Passwort nicht von dem Script erkannt, es Akzeptiert nur das Letzte gültige Passwort in der Liste.

          MfG Micha ;-)

          Kommentar


          • #20
            Jetzt überlegen wir mal was in deinem beschriebenen Fall passiert:
            Der User gibt sein PW ein (das zweitletzte). Das Script prüft und beim zweitletzten Eintrag wird die Var auf true gesetzt. Bei letzten Eintrag aber dürfte wieder ein false daraus werden.
            Vorschlag:
            Sofort nach dem ersten true die Schleife abbrechen und weiterleiten. Auf ein weiteres PW zu prüfen macht keinen Sinn weil es keines geben kann. Denn der Wert, den der User eingegeben hat bleibt konstant und ändert sich nicht. Also wird er wohl kein zweites Mal vorkommen.
            dumpe mal die Werte von $bool am Ende der Schleife
            PHP-Code:
            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;
               }
              }
            var_dump($bool);
            echo 
            '<br />';

            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


            • #21
              Wenn doch nach dem Ersten TRUE weiter Geleitet wird, wird doch das nächste Passwort ignoriert?

              Beispiel:
              1207225603 < ungültig
              1207227889 < gültig
              1207227974 < gültig

              Es soll beim zweiten oder dritten Passwort weitergeleitet werden.
              Oder verstehe ich dich jetzt falsch?

              MfG Micha ;-)

              Kommentar


              • #22
                Ops, hab noch die Ausgabe von [COLOR=darkred]var_dump($bool);[/COLOR] vergessen:

                bei 1207225603 kommt [COLOR=darkred]bool(false) [/COLOR] (ungültig)
                bei 1207227889 kommt [COLOR=darkred]bool(false) [/COLOR] (gültig)
                bei 1207227974 kommt [COLOR=darkred]bool(true) [/COLOR] (gültig)

                Kommentar


                • #23
                  ja so ist doch die Anforderung, Du hast nirgends beschrieben wlcher Nutzer genau welches Passwort kennen soll. Der Nutzer kennt ein Passwort aus einer Reihe von gueltigen Moeglichkeiten.

                  das erste das erkannt wird öffnet die Tür.
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #24
                    Also habe ich mich falsch ausgedrückt, sorry.
                    Ein User fordert ein Temporäres Passwort an, dass ihm über E-Mail zugeschickt wird, was auch nur für ihn Gültig sein sollte, es sei denn er schickt es weiter.
                    Was dann auch für den anderen Logischerweise gültig ist.
                    Ein anderer User fordert ebenfalls ein Passwort an, dann hat er nur noch Zugang auf den Geschützen Bereich und der andere mit Passwort, was ja eigentlich noch gültig ist, guckt in die Röhre.
                    Das möchte ich aber gern verhindern, alle gültigen Passwörter sollen vom Script akzeptiert werden und den Zugriff gewähren.

                    Kommentar


                    • #25
                      Also ich glaube langsam Du verstehst den Ansatz überhaupt nicht denn die vorgeschlagene Lösung macht genau das.
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #26
                        Macht es eben nicht, ich habe es ja getestet, es wird nur das letzte Passwort akzeptiert.

                        Beispiel:
                        Ich gebe 1207225603 ein, was abgelaufen ist, habe ich keinen Zugriff.
                        Ich gebe 1207227889 ein, was ja noch gültig ist, habe ich keinen Zugriff, warum?
                        Gebe ich aber 1207227974 ein, habe ich Zugriff.
                        Vielleicht ist es aber auch besser, die abgelaufenen Passwörter zu löschen, lässt sich das mit einbaun?

                        Kommentar


                        • #27
                          also nehmen wir an dass Du das hast:
                          1207225603 < ungültig
                          1207227889 < gültig
                          1207227890 < gültig
                          1207227974 < gültig

                          Ich gebe ein benutzer und als passwort 1207227890
                          Dann werde ich wenn ich jetzt die Datei einlese und folgendes mache dann bekomme ich logischerweise Zugriff:

                          Code:
                          $file = file($datei);
                          $time = mktime(0,0,0,date('m'),date('d')-4*7,date('Y')); // ich gehe davon aus dass in der Datei timestamps stehen
                          foreach($file as $zeile){
                            if(trim($zeile) == $pwd && $zeile > $time){
                              Header('Location: /index.php?access=granted');
                              exit;
                            }
                          }
                          Header('Location: /index.php?access=denied');
                          exit;
                          das sollte logisch funktionieren...
                          Beantworte nie Threads mit mehr als 15 followups...
                          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                          Kommentar


                          • #28
                            Danke @ MelloPie,

                            Es funktioniert nach dem Anpassen nun genauso wie ich es wollte:
                            PHP-Code:
                            <?php
                            $handle 
                            'check_access.txt';
                            $file file($handle);
                            $time time()-2*60*60;
                            strip_tags($_POST['passwd'], $_POST['user']);
                            foreach(
                            $file as $zeile){
                                if(isset(
                            $_POST['passwd']) && $_POST['passwd'] == trim($zeile) && $zeile $time &&
                                isset(
                            $_POST['user']) && $_POST['user'] == 'benutzer'){
                                    
                            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());
                                    exit;
                                }
                            }
                            Header('Location: /index.php?access=denied');
                            exit;
                            ?>

                            Gruss Micha ;-)

                            Kommentar


                            • #29
                              na dann hoffe ich mal dass Du jetzt auch weisst warum das funktioniert :-)
                              Beantworte nie Threads mit mehr als 15 followups...
                              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                              Kommentar


                              • #30
                                Ein User fordert ein Temporäres Passwort an, dass ihm über E-Mail zugeschickt wird, was auch nur für ihn Gültig sein sollte, es sei denn er schickt es weiter.
                                Darum mein Vorschlag in der Textdatei eine Zuordnung zwischen Benutzernamen und PW herzustellen. Dann ist für den Benutzer nur eines gültig.
                                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

                                Lädt...
                                X