Timo: .htaccess Authentifizierung - aber im Detail...

Hallo,

ich programmiere nun schon seit langer Zeit Webanwendungen aber neulich Nachts ist mir eine Frage gekommen, die ich mir noch nicht beantworten konnte. Auch sämtliche Recherchen meinerseits blieben leider erfolglos. Es geht dabei um die Benutzerauthentifizierung per .htaccess - allerdings die Funktionsweise im Detail.

Nehmen wir mal folgendes an:
Mein Browser greift auf eine Seite des Webservers zu, die per .htaccess geschützt ist. Nennen wir diesen Zugriff mal Request 1. Der Webserver findet die .htaccess, interpretiert diese und schickt meinem Browser einen 403, welcher daraufhin Benutzername und Passwort abfragt. Das ist Response 1. Ich gebe meinen gültigen Benutzernamen und das richtige Passwort ein - Request 2. Woher weiß der Webserver bei Request 3 und höher, dass ich die gleiche Person bin, die sich zuvor in Request 2 authentifiziert hat???
Es gibt keine Cookies, keine Session und nichts anderes mir bekanntes, was mich als die Person identifiziert, die sich in Request 2 angemeldet hat. Versteht Ihr was ich meine? Wird das auf Protokollebene geregelt? Oder regelt das alleine der Browser, was aber ja einem Clientseitigen 'Schutz' entsprechen würde und demzufolge leicht auszuhebeln ist.
Kann mir das jemand erklären oder Links posten?

  1. Hi Timo,

    Woher weiß der Webserver bei Request 3 und höher, dass ich die gleiche Person bin, die sich zuvor in Request 2 authentifiziert hat???

    Dein Browser merkt sich die von dir eingegebenen Daten und schickt sie bei jedem Aufruf wieder freiwillig mit, d.h. wenn du für example.org/path/ Benutzername und Passwort angegeben hast, schickt der Browser sie für alle Requests (d.h. auch für jede Grafik, CSS Datei usw.) unterhalb von example.org/path/ wieder „freiwillig” mit [1] - für example.org/ oder example.org/anotherpath/ allerdings nicht [2].

    [1] Die Daten verbleiben während der Sitzung im Arbeitsspeicher des Browsers oder so.
    [2] Möglicherweise versucht der Browser wenn er für /anotherpath/ 403 bekommt automatisch sich mit den Daten von vorhin anzumelden - das weiß ich jetzt nicht so genau, das Verhalten von verschiedenen Browsern kann dort natürlich auch durchaus unterschiedlich sein.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Die FlatBox 0.3 mit Dokumentation ist da!
    Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. (Albert Einstein)
    1. Hi Dennis,

      Dein Browser merkt sich die von dir eingegebenen Daten und schickt sie bei jedem Aufruf wieder freiwillig mit

      Oh man ist das billig ;-) Da hätte ich auch eigentlich selber drauf kommen können. Mal wieder zu kompliziert gedacht.

      Danke!

    2. Heißa, Dennis,

      [2] Möglicherweise versucht der Browser wenn er für /anotherpath/ 403 bekommt automatisch sich mit den Daten von vorhin anzumelden - das weiß ich jetzt nicht so genau, das Verhalten von verschiedenen Browsern kann dort natürlich auch durchaus unterschiedlich sein.

      Afaik entscheidet er dies anhand des gesandten AuthNames. Zumindest im SelfHTML-Forum benutzt er für /cgi-bin/user/ ja die gleiche Authentifikation wie für /my/.

      Gautera!
      Grüße aus Biberach Riss,
      Candid Dauth

      --
      Ein Fußball-Fan? Noch auf der Suche eine Schlafmöglichkeit im Großraum Stuttgart für die WM 2006? Wie wäre es mit Herrenberg, einer gemütlichen Kleinstadt am Rande des Schönbuchs – von der Lage her ideal, auch für andere Vorhaben im Urlaub. Ferienwohnungen-Herrenberg.com.
      http://cdauth.de/
      1. Hi Candid,

        Afaik entscheidet er dies anhand des gesandten AuthNames. Zumindest im SelfHTML-Forum benutzt er für /cgi-bin/user/ ja die gleiche Authentifikation wie für /my/.

        Das habe ich auch schon mal gedacht, aber die Pfade müssen auch eine Rolle spielen - kleines Beispiel, wie es real existiert:

        • /intern/       "Interner Bereich"
        • /intern/dev/   "Developper Bereich"

        Logge ich mich in den Internen Bereich ein, so werde ich für den Developper Bereich nicht mehr nach einem Passwort gefragt. Logge ich mich für den Developper Bereich ein (per Direkteingabe der URL) und gehe dann aufwärts in den Internen Bereich, werde ich erneut nach einem Passwort gefragt.

        Gebe ich beiden Bereichen denselben Namen, so ist es egal in welchen ich zuerst gehen - für den jeweiles anderen Bereich werde ich nicht erneut nach Benutzername/Passwort gefragt.

        Getestet mit Firefox 1.0.7 unter WinXP.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Die FlatBox 0.3 mit Dokumentation ist da!
        Werbung ist der Versuch, das Denkvermögen des Menschen so lange außer Kraft zu setzen, bis er genügend Geld ausgegeben hat. (Ambrose Bierce)
  2. Moin,

    ich programmiere nun schon seit langer Zeit Webanwendungen aber neulich Nachts ist mir eine Frage gekommen, die ich mir noch nicht beantworten konnte. Auch sämtliche Recherchen meinerseits blieben leider erfolglos. Es geht dabei um die Benutzerauthentifizierung per .htaccess - allerdings die Funktionsweise im Detail.

    Bitte, bitte schreib jetzt 100 mal an die Tafel: "Es gibt keine .htaccess-Authentisierung". Nein, wirklich nicht. .htaccess hat absoult überhaupt nichts damit zu tun. Du suchst Informationen über "HTTP Authentication". Die verbindlichen Quellen dazu sind RFC 2616 und RFC 2617.

    Mein Browser greift auf eine Seite des Webservers zu, die per .htaccess geschützt ist. Nennen wir diesen Zugriff mal Request 1. Der Webserver findet die .htaccess, interpretiert diese und schickt meinem Browser einen 403,

    Nein, tut er nicht. Er schickt einen 401, das ist ein himmelweiter Unterschied.

    welcher daraufhin Benutzername und Passwort abfragt. Das ist Response 1. Ich gebe meinen gültigen Benutzernamen und das richtige Passwort ein - Request 2. Woher weiß der Webserver bei Request 3 und höher, dass ich die gleiche Person bin, die sich zuvor in Request 2 authentifiziert hat???

    Gar nicht, das braucht er nicht. HTTP ist ein zustandloses Protokoll welches nur Anfrage und Antwort kennt. Anfrage und Antwort, Anfrage und Antwort, ... Eine Anfrage für eine geschützte Ressource, der keine authorisierten Authentisierungsdaten beiliegen wird mit 401 beantwortet. Eine Anfrage für eine geschützte Ressource, der authorisierte Authentisierungsdaten beiliegen wird verarbeitet und entsprechend dem Ergebnis der Bearbeitung beantwortet.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    1. Hi Henryk,

      Nein, tut er nicht. Er schickt einen 401, das ist ein himmelweiter Unterschied.

      Und ich habe noch gedacht: "403 ist ja Forbidden, aber hieß das, womit der Server das erste mal antwortet nicht irgendwie anders? Not authorisized?" Na ja, ich war jedenfalls zu faul nachzugucken ;-)

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Die FlatBox 0.3 mit Dokumentation ist da!
      Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.