Daniel: Login-Daten aus MySQL --- Verzeichnisschutz

Hallo,
vielleicht weiß jemand einen Tip zu folgendem Problem:

1.) Ich habe ein Login-Formular mit den Feldern "User" und "Passwort".
Trägt man sich dort ein, vergleicht ein PHP-Script, ob ein entsprechender Eintrag der benutzerdaten in einer MySQL-DB vorliegt. Falls ja, kommt man zum gewünschten Verzeichnis, falls nein, eine Fehlermeldung.

2.) Das funktioniert soweit, nur leider ist das Verzeichnis nicht geschützt, auf das man nach dem Login gelangt. Bei der Direkteingabe des Verzeichnisses in die Adresszeile des Browsers gelangt man also auch dort hin :-((

3.) Schütze ich mein Verzeichnis also mit .htaccess, so kommt die HTTP-Authentifizierung des Browsers (will ich aber nicht, sondern mein Formular beibehalten) und ausserdem will ich ja die Log-In-Daten dynamisch in meiner DB verwalten.

Zusammenfassung: Ich würde also gerne

  • den Login in meinem HTML-Formular belassen
  • die Daten "User" und "Passwort" in meiner MySQL-DB lassen und
  • einen Verzeichnisschutz einrichten, der genau dieses Verzeichnis schützt und nur bei Login freigibt.

Kann mir bitte jemand helfen ?

Gruß von DANIEL

  1. Hallo Daniel,
    mache es mit Sessions. Das ist unter PHP4 sehr leicht zu realisieren und laeuft folgendermassen ab:

    1. Den Vergleich mit den Daten die der User bei der Anmeldung eingibt und der Datenbank hast du ja anscheinend schon hinbekommen.

    2. Wenn der User die Erlaubnis hat, generierst du ueber
    session_start();
    eine Session Id fuer den User. Jetzt fragst du auf jeder Seite deines Verzeichnisses ab, ob eine Session für den User schon angemeldet ist. Wenn das der Fall ist, kann er die Seite aufrufen, wenn das nicht der Fall ist, schmeisst du ihn ueber einen Header raus.

    3. Die Session Id wird ueber einen Cookie, oder (und das finde ich besonders genial, denn PHP checkt das automatisch ab), wenn kein Cookie erlaubt ist, ueber die URL weitergereicht. Dafuer ist es aber notwendig, dass du an jeden Link die id mit "<?php echo SID?>"dranhaengst. Konkret wuerde das so aussehen:
    <a href="xyz.html?<?php echo SID; ?>"

    4. Wenn du ganz auf Nummer sicher gehen willst, traegst du zusaetzlich ueber "session_register($deine_variable);" noch eine sogenannte Session Variable mit in die Sessionfile ein. D.h. du fragst nicht nur ab, ob eine valide Session Id vorhanden ist, sondern zusaetzlich noch, ob die entsprechende Variable in die Sessionfile eingetragen ist. Damit ist das System dann ziemlich wasserdicht. Das im einzelnen und ganz genau auszufuehren wuerde hier etwas den Rahmen sprengen.

    Wenn du aber unter diesen Stichwoertern etwas bei google oder den einschlaegigen Sites suchtst, solltest du das relativ problemlos einbauen koennen.

    Gruesse
    Ralf

  2. Hi Daniel,

    Zusammenfassung: Ich würde also gerne

    • den Login in meinem HTML-Formular belassen
    • die Daten "User" und "Passwort" in meiner MySQL-DB lassen und
    • einen Verzeichnisschutz einrichten, der genau dieses Verzeichnis schützt und nur bei Login freigibt.

    Fordering 1 bewirkt, daß Server Authentication ausscheidet.

    Würdest Du darauf verzichten können, dann hätte ich Dir für Forderung 2 und 3 den Einsatz von mod_auth_mysql empfohlen.

    Falls Du Forderung 1 unbedingt brauchst, kannst Du Dein Problem dadurch lösen, daß Du _sämtliche_ Seiten durch ein Zugangskontrollskript auslieferst, statt auf die eigentlichen Seiten zuzugreifen.

    Die wesentliche Frage ist, wo in der Zwischenzeit das Wissen über die erfolgreiche Authentifizierung gespeichert bleiben soll - Cookies sind nicht schön, Query-Strings sind als Einsprungpunkte auch nicht so toll (weil sie Bestandteil von Log-Dateien sind, als Referrer durch das Web wandern und anderes mehr).
    Bei der Verwendung von ServerAuthentication hättest Du dieses Problem nicht.

    Für Deine Randbedingungen kann ich nichts Besseres vorschlagen als das Session-Modell von Ralf.
    Aber ich würde Forderung 1 noch mal hinterfragen.

    Viele Grüße
          Michael