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

Beitrag lesen

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";