Manfred: Passwortabfrage für Ordner ohne .htaccess möglich?

Hallo,

vielleicht könnt ihr mir bei folgendem Problem helfen:

Auf einer Website befindet sich ein Login-Formular (z.B. /login.php). Wenn der User dort seine Zugangsdaten einträgt, soll er Zugriff auf einen bestimmten Ordner bekommen (z.B. /sicherer_ordner/index.html).

1. Die Dateien sollen im Browser angezeigt werden können (es ist kein Up-/Download-Ordner, d.h. die Dateien sollen eigentlich nicht erst durch PHP durchgeparst werden, da auch Templates und komplexe Script in dem sicheren Ordner liegen und es das ganze dann höchstwahrscheinlich zerschiesst. Da es sich um hunderte von Dateien im sicheren Ordner (unter anderem auch Graphiken) handelt, kann ich nicht in jede Datei eine Abfrage integrieren.

2. Das größte Problem ist, daß wenn ein User direkt über den Link in /sicherer_ordner/unterordner/irgendeine_datei.gif springt, ein Schutz dieser Datei wahrscheinlich nur über .htaccess realisiert werden kann. Allerdings kann ich nirgends eine Möglichkeit finden, die unschöne htaccess Abfrage-Maske durch eine Kombination aus Login-Formular und PHP zu umgehen. Da der User in den meisten Fällen bereits auf der Website eingeloggt ist, finde ich es unsinnig, die Login-Daten nochmals in eine htaccess-Maske eintragen zu müssen.

http://php3.de/manual/de/features.http-auth.php hat mir nicht wirklich weitergeholfen, denn soweit ich das verstehe, ist damit nur möglich, wieder die unschöne HTTP-Login-Maske zu erzwingen?

Gibt es eine Möglichkeit, die Login-Daten irgendwie zu übergeben, so dass keine htaccess-Maske erscheint?

Viele Grüße,
Manfred

  1. hi,

    Allerdings kann ich nirgends eine Möglichkeit finden, die unschöne htaccess Abfrage-Maske durch eine Kombination aus Login-Formular und PHP zu umgehen.

    mod_auth_cookie

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      vielen Dank für die Antwort.

      Das sieht sehr vielversprechend aus, ich werd mich da mal einlesen.

      Viele Grüße,
      Manfred

  2. echo $begrüßung;

    Auf einer Website befindet sich ein Login-Formular (z.B. /login.php). Wenn der User dort seine Zugangsdaten einträgt, soll er Zugriff auf einen bestimmten Ordner bekommen (z.B. /sicherer_ordner/index.html).

    Das funktioniert prinzipiell nicht. Entweder liegt der Ordner in einem öffentlich zugänglichen Bereich (sprich: innerhalb des DocumentRoot), dann liefert der Apache den Inhalt aus, wenn es ihm nicht verboten wurde. PHP bekommt davon nichts mit. Es sei denn, du schaffst einen Mechanismus, der intern eine Umschreibung vornimmt, so dass bei jedem Aufruf einer dort liegenden Ressource ein PHP-Script anläuft, das die Berechtigung prüft und eine Auslieferung vornimmt (Stichwort: mod_rewrite).

    1. Die Dateien sollen im Browser angezeigt werden können (es ist kein Up-/Download-Ordner, d.h. die Dateien sollen eigentlich nicht erst durch PHP durchgeparst werden, da auch Templates und komplexe Script in dem sicheren Ordner liegen und es das ganze dann höchstwahrscheinlich zerschiesst. Da es sich um hunderte von Dateien im sicheren Ordner (unter anderem auch Graphiken) handelt, kann ich nicht in jede Datei eine Abfrage integrieren.

    Es gibt neben include und require, welche PHP-Code parsen und ausführen auch noch readfile(), welches den Inhalt einer Datei zum Webserver durchreicht, ohne ihn zu analysieren. Du musst nur dafür sorgen, dass ein passender Content-Type-Header ausgeliefert wird. Dem Webserver wurde konfiguriert, dass er bei bestimmten Dateiendungen den dazugehörigen Content-Type mitsendet. Dieses Verhalten musst du nachbilden, wenn der Browser richtig darauf reagieren soll, und nicht gerade wild darauflosrät, wie der IE.

    Allerdings kann ich nirgends eine Möglichkeit finden, die unschöne htaccess Abfrage-Maske durch eine Kombination aus Login-Formular und PHP zu umgehen.

    Das geht schon aus Prinzip nicht. Ein Browser stößt beim Abfragen einer Ressource auf ein 401-Unauthorized. Daraufhin kommt das ach so unschöne Eingabefeld. Mit den eingetragenen Daten wird die Ressource erneut aufgerufen. Bei allen weiteren Abfragen werden diese Authentisierungsdaten nun automatisch mitgesendet. Dieses Verhalten kannst du nicht nachbilden, weil es keinen (überall funktionierenden) Mechanismus gibt, dem Browser diese Daten anderweitig unterzuschieben.
    In einem Link (http://user:password@host/...) mag sie der IE nicht mehr ohne in der Registry etwas umzustellen, und der Firefox zeigt daraufhin das "unschöne" Eingabefeld an und lässt sich diese Daten nochmal bestätigen.

    Da der User in den meisten Fällen bereits auf der Website eingeloggt ist, finde ich es unsinnig, die Login-Daten nochmals in eine htaccess-Maske eintragen zu müssen.

    Gegenargumentation: Ich finde es unsinnig einen Login-Mechanismus nachzubilden, wo es doch schon eine funktionierende Lösung gibt.

    echo "$verabschiedung $name";

  3. Hallo Manfred,

    Auf einer Website befindet sich ein Login-Formular (z.B. /login.php). Wenn der User dort seine Zugangsdaten einträgt, soll er Zugriff auf einen bestimmten Ordner bekommen (z.B. /sicherer_ordner/index.html).

    1. Die Dateien sollen im Browser angezeigt werden können (es ist kein Up-/Download-Ordner, d.h. die Dateien sollen eigentlich nicht erst durch PHP durchgeparst werden, da auch Templates und komplexe Script in dem sicheren Ordner liegen und es das ganze dann höchstwahrscheinlich zerschiesst.

    Du brauchst sie ja nicht parsen, du musst sie nur ausgeben.

    Da es sich um hunderte von Dateien im sicheren Ordner (unter anderem auch Graphiken) handelt, kann ich nicht in jede Datei eine Abfrage integrieren.

    1. Das größte Problem ist, daß wenn ein User direkt über den Link in /sicherer_ordner/unterordner/irgendeine_datei.gif springt, ein Schutz dieser Datei wahrscheinlich nur über .htaccess realisiert werden kann. Allerdings kann ich nirgends eine Möglichkeit finden, die unschöne htaccess Abfrage-Maske durch eine Kombination aus Login-Formular und PHP zu umgehen.

    Das ist vielleicht nicht das Schönste - auf jeden Fall aber das Sicherste.

    Da der User in den meisten Fällen bereits auf der Website eingeloggt ist, finde ich es unsinnig, die Login-Daten nochmals in eine htaccess-Maske eintragen zu müssen.

    http://php3.de/manual/de/features.http-auth.php hat mir nicht wirklich weitergeholfen, denn soweit ich das verstehe, ist damit nur möglich, wieder die unschöne HTTP-Login-Maske zu erzwingen?

    Ja, das bietet dir nur Zugriff auf Benutzernamen und Passwort von HTTP-auth.

    Gibt es eine Möglichkeit, die Login-Daten irgendwie zu übergeben, so dass keine htaccess-Maske erscheint?

    Mein Vorschlag:
    * Entweder du lenkst alle Anfragen an eine Datei innerhalb des sicheren
      Ordners auf ein PHP-Script (mit mod_rewrite).
    * Oder du sperrst den sicheren Ordner (Deny from All), und erlaubst den
      Zugriff nur über ein PHP-Script (mit PATH_INFO, d.h. /sicher.php/unterordner/datei;
      $_SERVER['PATH_INFO'] enthält dann "/unterordner/datei"*).
    Und in diesem PHP-Script fragst du dann halt die Login-Daten ab.

    Viele Grüße aus Freiburg,
    Marian

    * ob mit oder ohne / am Anfang weiß ich nicht mehr

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
  4. Hallo,

    vielen Dank nochmal an alle für die Vorschläge und Tipps, ich werde mal ein paar Sachen davon austesten.

    Viele Grüße,
    Manfred