Stefan: 404 Error

Hallo zusammen
Wenn ein User keinen Zugriff auf eine Seite hat, sende ich den 401 Header Status. Ich dachte eigentlich, dass dann automatisch die 401 Fehler Seite erscheint.
Den Header Status sende ich folgendermassen (PHP):
header ("HTTP/1.1 401");

Leider wird trotzdem die Seite angezeigt, die eigentlich gesperrt sein sollte.

Was mache ich falsch oder ist meine Überlegung falsch, dass wenn ich den Header Status 401 sende, die entsprechende Fehlerseite erscheint?

Vielen Dank für eure Hilfe.

  1. Moin!

    Wenn ein User keinen Zugriff auf eine Seite hat, sende ich den 401 Header Status. Ich dachte eigentlich, dass dann automatisch die 401 Fehler Seite erscheint.
    Den Header Status sende ich folgendermassen (PHP):
    header ("HTTP/1.1 401");

    Leider wird trotzdem die Seite angezeigt, die eigentlich gesperrt sein sollte.

    Was mache ich falsch oder ist meine Überlegung falsch, dass wenn ich den Header Status 401 sende, die entsprechende Fehlerseite erscheint?

    Wenn du einfach nur Status 401 sendest, dann wird der Inhalt deiner Seite zusammen mit diesem HTTP-Status an den Browser geschickt - was wiederum verursacht, dass der Browser seinen Benutzer nach Username und Passwort fragt, und wenn der Benutzer den Vorgang abbricht, anstelle dessen die ausgelieferte Seite anzeigt - das ist die, die du eigentlich schützen wolltest, oder?

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Wenn du einfach nur Status 401 sendest, dann wird der Inhalt deiner Seite zusammen mit diesem HTTP-Status an den Browser geschickt - was wiederum verursacht, dass der Browser seinen Benutzer nach Username und Passwort fragt, und wenn der Benutzer den Vorgang abbricht, anstelle dessen die ausgelieferte Seite anzeigt - das ist die, die du eigentlich schützen wolltest, oder?

      Ja das ist die, die ich schützten möchte.
      Die User Authentifikation findet über ein php Script statt und nicht mit der Apache Komponente, weil es mehrere Benutzergruppen gibt und jede Gruppe auf andere Seiten Zugriff hat. Ausserdem können die Berechtigung durch eine Weboberfläche gesteuert werden.

      Das mit der normalen Weiterleitung header("Location: ..."); hab ich mir auch überlegt, doch fände ich es passender, wenn der Server selbst, anhand des Status Codes die Seite ausliefert.

      1. Moin!

        Ja das ist die, die ich schützten möchte.
        Die User Authentifikation findet über ein php Script statt und nicht mit der Apache Komponente, weil es mehrere Benutzergruppen gibt und jede Gruppe auf andere Seiten Zugriff hat. Ausserdem können die Berechtigung durch eine Weboberfläche gesteuert werden.

        Ein simples "Status 401" nimmt dir aber nicht ab, trotzdem die Fallunterscheidung zu treffen, ob du den tatsächlichen Inhalt der Seite auslieferst, oder eine Meldung, die den User erreicht, wenn er die Passworteingabe abbricht (oder in manchen Browsern auch nach dem dritten Mal Status 401 auf derselben URL).

        Das mit der normalen Weiterleitung header("Location: ..."); hab ich mir auch überlegt, doch fände ich es passender, wenn der Server selbst, anhand des Status Codes die Seite ausliefert.

        Wird ja auch funktionieren, wenn du es richtig programmierst... :)

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
  2. hallo,

    Wenn ein User keinen Zugriff auf eine Seite hat, sende ich den 401 Header Status.

    Das ist ein bißchen verworren. Diese Aufgabe sollte eigentlich dein Webserver erfüllen.

    Den Header Status sende ich folgendermassen (PHP):
    header ("HTTP/1.1 401");
    Leider wird trotzdem die Seite angezeigt, die eigentlich gesperrt sein sollte.

    Weil das keine "Sperrung" bedeutet. Der HTTP-Statuscode 401 bedeutet, "Die angeforderten Daten sind zugangsgeschützt. Der Server kann die Daten nur senden, wenn eine gültige Zugangskennung, bestehend aus Benutzername und Passwort, bei der Anfrage mit gesendet wird".

    Was mache ich falsch oder ist meine Überlegung falsch, dass wenn ich den Header Status 401 sende, die entsprechende Fehlerseite erscheint?

    Du versuchst es mit PHP zu lösen. Zwar wäre es möglich, mit
      header("Location:http://www.example.test/fehler401.php")
    herumzuwurschteln, aber eine solche "Weiterleitung" betrifft _alle_, und scheint von dir nicht beabsichtigt - ganz abgesehen davon, daß das ziemlich unsinnig wäre.

    Versuche das Ganze über .htaccess zu lösen.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
  3. Hallo,

    Wenn ein User keinen Zugriff auf eine Seite hat, sende ich den 401 Header Status.

    das ist eigentlich nicht so ganz sauber, 401 heißt ja "Authorization required". Ich würde 403 Forbidden für passender halten, vor allem weil der Browser beim 401 normalerweise mit der Anfrage nach Benutzername und Kennwort reagiert.

    Den Header Status sende ich folgendermassen (PHP):
    header ("HTTP/1.1 401");
    Leider wird trotzdem die Seite angezeigt, die eigentlich gesperrt sein sollte.

    Ich bin mir nicht sicher, aber müsste es nicht "Status: 401" heißen?

    So long,
     Martin

    --
    Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
    Erfahrung bekommt man, indem man das nicht tut.
    1. Hi,

      header ("HTTP/1.1 401");

      Ich bin mir nicht sicher, aber müsste es nicht "Status: 401" heißen?

      Nö.
      Aber meist wird nach dem numerischen Statuscode noch der String geliefert, also z.B. so:

      HTTP/1.x 401 Authorization Required

      (so macht's das Forum hier)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.