HTTP-Authentifizierung / wie wieder ausloggen?

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

  • HTTP-Authentifizierung / wie wieder ausloggen?

    hallo jungs =)
    wie bekomme ich die sitzung für eine HTTP-Authentifizierung
    "_SERVER['PHP_AUTH_USER']" ... wieder gelöscht ohne das fenster zu schliessen?
    und ist diese methode solala sicher? oder geht das so?
    habe ein kleines login script gemacht welches array nach usernamen sucht und denn pw vergleicht.
    naja das löschen hab ich schon per js "document.execCommand("ClearAuthenticationCache")"
    versucht aber scheint nicht ganz zu wollen.

    irgendwelche infos für klein-ricola weiblein? =)
    -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

  • #2
    wieder gelöscht ohne das fenster zu schliessen?
    unset?

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      das ist scheinbar nur mit frickelei möglich:
      http://www.php.net/manual/en/feature...auth.php#76511

      also ganz auf http-auth verzichten, läuft auch nicht unter cgi, und eine session-basierte lösung benutzen.

      Kommentar


      • #4
        danke euch beiden, habe das mit der unset variante und es funzt =)
        aber werde mir mal zur sicherheit das mit falschen user und falschem
        pw ansehen um es abzusichern , naja erstmal testen, danke noch mal =)
        -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

        Kommentar


        • #5
          Original geschrieben von Ricola
          danke euch beiden, habe das mit der unset variante und es funzt =)
          das funzt ?!?
          ich dachte, der browser hält das im cache und beim nächsten request ist wieder alles da!
          jetzt bin ich ein bißchen baff.

          Kommentar


          • #6
            wenn ich es wieder hin bekomme poste ich den code mal
            weil ich hab wieder herum gefummelt und jetzt will es net mehr
            und ich weiss nicht mehr welche reihenfolge ich hatte (>.'<)
            -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

            Kommentar


            • #7
              unset() hilft hier nicht! Der Browser sendet die AUTH-Daten bei jedem Request wieder mit.

              In HTTP-AUTH gibt es kein Ausloggen. Auch kein Einloggen. HTTP ist zustandslos.
              Jeder mir bekannte Browser merkt sich die AUTH-Daten bis er geschlossen wird.

              Du kannst natürlich erneute 401-Header senden, mit dem Realm spielen oder was weiß ich. Aber spezifiziert ist das alles nicht.

              http://rfc.net/rfc2617.html

              Kommentar


              • #8
                och meno jetz bekomm ich das nicht so wieder hin wie vorhin (>.<)
                aber ausloggen geht nur wenn nach dem unset gleich wieder der auth header folgt.
                nur der haken ist dass meine request variable erhalten
                bleibt die die unset auslöst und das macht ein teufelskreis.
                und vorhin hatte ich es irgendwie geschaft nur wie fragt lieber nicht.
                PHP-Code:
                <?
                //error_reporting(E_ALL);
                if($_REQUEST['logout'] == true)
                    {
                    unset($PHP_AUTH_USER);
                    unset($PHP_AUTH_PW);
                    #exit;
                    }

                $user_db = array(

                'aaa' => 'bbb',
                'ccc' => 'ddd'

                                );
                $n_keys = array_keys($user_db);
                array_unshift($n_keys,'dummy');
                unset($n_keys[0]);
                #var_dump(array_search("aaa",$n_keys));

                if(array_search($PHP_AUTH_USER,$n_keys)!=false)
                    {
                    $user_name = $n_keys[array_search($PHP_AUTH_USER,$n_keys)];
                    #echo 'true1';
                    if($PHP_AUTH_PW == $user_db[$user_name])
                        {
                        $user_pw = $user_db[$user_name];
                        #echo 'true2';
                        }
                    }

                function error ($error_message) {
                    echo $error_message.'<br /><br /><a href="?">login</a>';
                    exit;
                }
                if ( (!isset($PHP_AUTH_USER)) ||
                        !(($PHP_AUTH_USER == "$user_name") &&
                            ($PHP_AUTH_PW == "$user_pw" )) )
                    {
                    header("WWW-Authenticate: Basic realm=\"Test Authentication System\"");
                    header("HTTP/1.0 401 Unauthorized");
                    error("<b>Bad login or password</b>");
                }
                var_dump(($PHP_AUTH_USER == "$user_name"),( $PHP_AUTH_PW == "$user_pw" ));
                ?>
                <a href="?logout=true">logout</a>
                als ich versuchte eine weiterleitung per header location einzubauen hab ich es versaut.
                also wenn es machbar ist dass nach dem login die request'logout'
                verschwindet wird es gehen, aber wie bekommen wir das nur hin?
                -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

                Kommentar


                • #9
                  Das unset() kannst du weglassen, das bringt Nullkommagarnichts. Einzig die Header sind entscheidend.

                  Und ich sags nochmal: Selbst wenn es funktioniert, stützt sich dein Versuch des "Ausloggens" auf nicht standardisiertes Verhalten des Clients und ist somit höchst unsicher!

                  Stell dir vor du gehst in ein Internetcafé, loggst dich ein, loggst dich wieder aus und gehst. Danach komme ich, klicke einmal auf den Back-Button und schon bin ich wieder drin.

                  Steig lieber auf Sessions um. Sessions kannst du sauber vernichten, da die Daten alle auf dem Server liegen. Damit bist du nicht vom Client abhängig.

                  Kommentar


                  • #10
                    hmm naja muss ich durch =)
                    danke =)
                    hab mal wieder was dazu gelernt =)
                    @---)----
                    -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

                    Kommentar

                    Lädt...
                    X