Robbi: Weiterleitung bei falscher Passwort-Eingabe

Hallo, ich schütze auf einer Website ein Verzeichnis mit htaccess und htpasswd. Wenn nun aber jemand falsche Daten eingibt, erscheint eine Seite mit Werbelinks, die überhaupt nichts mit der eigentlichen Website zu tun hat. Über einen unten stehenden Link kommt man dann zum Provider. Ich möchte aber, dass man auf eine bestimmte Seite weitergeleitet wird, wenn man falsche Daten eingegeben hat. Notfalls auf die existierende 404er. Wie kann ich das machen? Vermutlich muss ich was in die htaccess eintragen, oder? Es wäre klasse, wenn mir da jemand weiterhelfen könnte. Danke!

  1. Hallo,

    ich schütze auf einer Website ein Verzeichnis mit htaccess und htpasswd. Wenn nun aber jemand falsche Daten eingibt, erscheint eine Seite mit Werbelinks, die überhaupt nichts mit der eigentlichen Website zu tun hat. Über einen unten stehenden Link kommt man dann zum Provider. Ich möchte aber, dass man auf eine bestimmte Seite weitergeleitet wird, wenn man falsche Daten eingegeben hat. Notfalls auf die existierende 404er. Wie kann ich das machen? Vermutlich muss ich was in die htaccess eintragen, oder? Es wäre klasse, wenn mir da jemand weiterhelfen könnte.

    Du suchst vermutlich nach der Direktive ErrorDocument 401 (beim Apache)?

    Alternativ kannst du dieses auch schon als Payload an die Authorisierungsaufforderung anhängen. Das muss dann nach einer Leerzeile ein vollständiges und valides HTML-Dokument sein.

    LG
    localhorst

    1. Hallo,

      kleiner Nachtrag...

      ich schütze auf einer Website ein Verzeichnis mit htaccess und htpasswd. Wenn nun aber jemand falsche Daten eingibt, erscheint eine Seite mit Werbelinks, die überhaupt nichts mit der eigentlichen Website zu tun hat. Über einen unten stehenden Link kommt man dann zum Provider. Ich möchte aber, dass man auf eine bestimmte Seite weitergeleitet wird, wenn man falsche Daten eingegeben hat. Notfalls auf die existierende 404er. Wie kann ich das machen? Vermutlich muss ich was in die htaccess eintragen, oder? Es wäre klasse, wenn mir da jemand weiterhelfen könnte.

      Du suchst vermutlich nach der Direktive ErrorDocument 401 (beim Apache)?

      Alternativ kannst du dieses auch schon als Payload an die Authorisierungsaufforderung anhängen. Das muss dann nach einer Leerzeile ein vollständiges und valides HTML-Dokument sein.

      Bitte auch die Apache-Doku lesen.

      Soweit ich mich außerdem erinnere, muss das Dokument eine passive HTML-Seite sein, also leider kein PHP-Skript o.ä. Es wird vom Apachen intern included, wenn keine ausreichende Payload am Auth-Header dranhängt.

      LG
      localhorst

      1. Soweit ich mich außerdem erinnere, muss das Dokument eine passive HTML-Seite sein,

        Das ist eine Empfehlung für ErrorDocument 500. Grund: Wenn CGI nicht funktioniert, dann macht es keinen Sinn, dass ErrorDocument per CGI ausliefern zu wollen,

        Spätestens wenn eine vollständige URL angegeben wird:

        ErrorDocument 500 http://error.example.com/server_error.php
        

        ist sowieso jede Einschränkung „perdu“.

        Ich hab das gestestet:

        ErrorDocument 500 /phpinfo.php
        

        Ergebnis:

        1. Soweit ich mich außerdem erinnere, muss das Dokument eine passive HTML-Seite sein,

          Das ist eine Empfehlung für ErrorDocument 500.

          Empfehlung ist "gut". Bei einem 500er wird auf meinem Apache mit PHP als Modul (andere Setups können das anders machen) NICHTS abgearbeitet. Also auch nicht

          ErrorDocument 500 /phpinfo.php
          

          phpinfo.php wird NICHT ausgeführt.

          ErrorDocument 500 https://www.example.com/
          

          Die Weiterleitung findet NICHT statt.

          Aber das war ja auch der falsche Test. Error 401 sollte gestestet werden und damit funktionierts auch:

          ErrorDocument 401 /phpinfo.php
          

          Ergebnis nach Abbruch der Anmeldung:

          Das geht also.

          1. Hallo,

            Soweit ich mich außerdem erinnere, muss das Dokument eine passive HTML-Seite sein,

            Ergebnis nach Abbruch der Anmeldung:

            Netter Fake ;-)

            Was steht denn drin in phpinfo.php?
            Hättest zumindest die Ausführungszeit ändern sollen.

            LG
            localhorst

            1. Was steht denn drin in phpinfo.php?

              https://code.fastix.org/Projekte/PHP%3AReplacement für phpinfo()/

              Test: https://home.fastix.org/test401/ (Anmeldung abbrechen...)

              AuthType basic
              AuthName "Test401"
              AuthUserFile ".htpasswd"
              Require valid-user
              ErrorDocument 401 /phpinfo.php
              
              1. Hi Rakete,

                ich habs auch nochmal ausprobiert auf einem Apache 2.2. Da ging es tatsächlich auch schon. Muss wohl ein Synapsenfehler in meinem Assoziativspeicher gewesen sein ;-)

                Dann kann man die 401-Seite also auch dynamisch anpassen lassen.

                LG
                localhorst

            2. Hättest zumindest die Ausführungszeit ändern sollen.

              Wieso?

              echo "<?=time();" | php
              
              1597828570
              

              Vielleicht weil Deine Uhr falsch eingestellt ist?

              date
              Mi 19. Aug 09:17:21 UTC 2020
              
    2. Uff, bei den ganzen Antworten bin ich jetzt ziemlich erschlagen und verstehe auch nicht viel. Vielleicht zur Erklärung: In der htaccess-Datei habe ich die Zeilen:

      
      > #ErrorDocument 401 https: ... fehler401.html
      > #ErrorDocument 401 https: ... fehler403.html
      > #ErrorDocument 401 https: ... fehler404.html
      > #ErrorDocument 401 https: ... fehler500.html
      
      

      Ich dachte eigentlich, dass das damit aufgefangen wird und an die entsprechende Seite weitergeleitet wird. Muss das vielleicht erweitert werden? Es handelt sich übrigens nicht um PHP-Seiten, nur reines HTML.

      1. Wenn die Zeilen wirklich so aussehen:

        #ErrorDocument 401 https: ... fehler401.html
        #ErrorDocument 401 https: ... fehler403.html
        #ErrorDocument 401 https: ... fehler404.html
        #ErrorDocument 401 https: ... fehler500.html
        

        sind es Kommentare. Gedacht ist das so:

        ErrorDocument 401 https: ... fehler401.html
        ErrorDocument 403 https: ... fehler403.html
        ErrorDocument 404 https: ... fehler404.html
        ErrorDocument 500 /fehler500.html #(Keine Weiterleitung!)
        
      2. Hallo,

        Vielleicht zur Erklärung: In der htaccess-Datei habe ich die Zeilen:

        > #ErrorDocument 401 https: ... fehler401.html
        > #ErrorDocument 401 https: ... fehler403.html
        > #ErrorDocument 401 https: ... fehler404.html
        > #ErrorDocument 401 https: ... fehler500.html
        

        die nützen aber nichts, weil sie mit dem Raute-Zeichen auskommentiert sind; außerdem nehme ich mal an, dass der Fehlercode (der erste Parameter nach ErrorDocument) nicht viermal derselbe ist. Vermutlich ein Copy&Paste-Error.

        Aber selbst wenn diese Zeilen wirksam sind: Ein ErrorDocument sollte man nicht per HTTP/HTTPS abholen lassen. Dann holt sich der Browser das ErrorDocument nämlich als ganz normales Dokument und bekommt es mit Status 200 (OK). Also genau nicht das, was man will.

        Es handelt sich übrigens nicht um PHP-Seiten, nur reines HTML.

        Das ist, wie schon beschrieben wurde, bei den meisten Statuscodes egal.

        Live long and pros healthy,
         Martin

        --
        Home is where my beer is.
        1. Hallo Martin,

          Aber selbst wenn diese Zeilen wirksam sind: Ein ErrorDocument sollte man nicht per HTTP/HTTPS abholen lassen. Dann holt sich der Browser das ErrorDocument nämlich als ganz normales Dokument und bekommt es mit Status 200 (OK). Also genau nicht das, was man will.

          Ich bin kein Indianerhäuptling und meine Reaktion war: Hä? Was meint er?

          Darum habe ich mich schlaugebingt und finde in der Apache Doku diese Ergänzung (fett wie im Original). Ich nehme an, das hilft auch anderen, die noch den Häuptlingslehrgang vor sich haben.

          Wenn Sie eine ErrorDocument-Anweisung angeben, die auf eine entfernte URL weist (d.h. irgendetwas mit der Methode http davor), beachten Sie bitte, dass der Apache eine Umleitung zum Client sendet, um diesem mitzuteilen, wo das Dokument zu finden ist, auch wenn das Dokument letztlich wieder zum gleichen Server führt. Das hat mehrere Auswirkungen. Die wichtigste ist, dass der Client nicht den Original-Statuscode erhält sondern statt dessen einen Umleitungs-Statuscode. Dies wiederum kann Web-Robots und andere Clients verwirren, die den Statuscode dazu verwenden, herauszufinden ob eine URL gültig ist. Wenn Sie eine entfernte URL in einer Anweisung ErrorDocument 401 verwenden, wird der Client darüber hinaus nicht wissen, dass er den Benutzer zur Eingabe eines Passwortes auffordern muss, da er den Statuscode 401 nicht erhält. Deshalb müssen Sie sich auf ein lokales Dokument beziehen, wenn Sie eine Anweisung ErrorDocument 401 verwenden.

          Also schlecht ist:

          ErrorDocument 401 https://my.example.org/fehler401.html
          

          Und gut ist:

          ErrorDocument 401 /fehler401.html
          

          Edit: Name der Fehlerseite korrigiert

          Rolf

          --
          sumpsi - posui - obstruxi
          1. Hallo,

            das Apache-Manual hatte ich deshaöb schon verlinkt.

            Also schlecht ist:

            ErrorDocument 401 https://my.example.org/fehler404.html
            

            Und auch noch ein bisschen schlecht ist:

            ErrorDocument 401 /fehler404.html
            

            Wenn es die Fehlerseite zu 401 ist, sollte man die auch passend bezeichnen. Sonst steigt man später nicht mehr durch.

            Und wir wissen jetzt (auch wieder), dass es auch möglich ist, ein Skript aufzurufen, z.B. auch die zentrale index.php?stat=401&amp;reject, die dann die Fehlermeldung im passenden Design und ausreichender Größe zusammen mit Menu, oder Rücklink, neuem Login-Link, mit Status-Code 401, usw. ausliefern kann.

            LG
            localhorst

            1. Hallo localhorst,

              Wenn es die Fehlerseite zu 401 ist, sollte man die auch passend bezeichnen.

              Autsch. Fixed.

              Rolf

              --
              sumpsi - posui - obstruxi
            2. Und wir wissen jetzt (auch wieder), dass es auch möglich ist, ein Skript aufzurufen, z.B. auch die zentrale index.php?stat=401&amp;reject, die dann die Fehlermeldung im passenden Design und ausreichender Größe zusammen mit Menu, oder Rücklink, neuem Login-Link, mit Status-Code 401, usw. ausliefern kann.

              Oder welches den Statuscode ganz stumpf unangetastet lässt:

              https://forum.selfhtml.org/self/2020/aug/18/weiterleitung-bei-falscher-passwort-eingabe/1774712#m1774712

          2. Hallo Rolf und die anderen, danke fürs Nase-drauf-Stoßen! Ich hatte gleich mehrere Fehler gemacht.

            1. Fehler: Die Rauten, die auskommentieren, was danach kommt.
            2. Fehler: ErrorDocument falsch bekannt (alle "401").
            3. Fehler: Absolute Adresse der Fehlerseite, statt relativem Pfad.

            Nach dem Korrigieren funzt es jetzt :-D

            Sieben Dank!

            Robbi

            1. Hallo Robbi,

              ich war's nun am wenigsten, aber schön, dass Du nun zurecht kommst 😀

              Rolf

              --
              sumpsi - posui - obstruxi