Hallo!
Mein Login-Bereich ist fast fertig, aber ich bin mir bei der Sicherheit noch nicht ganz sicher Ich will einfach nur mal ein paar Kommentare von euch wie ihr jetzt die Sicherheit einschätzt. Folgendes mal zur Beschreibung wie das bei mir läuft:
- Login mit Username und Passwort über ne etwas versteckte Index-Seite (taucht nicht in der normalen Menüleiste auf); Session wird hier bereits gestartet. Alle Seiten im Login-Bereich haben das meta-Tag "robots"-"noindex". und sonst keine Meta-Tags. Es wird ein Cookie "Login" gesetzt, der keine weiteren Informationen beinhaltet sondern "einfach erstmal nur da" ist.
- Login-Formular leitet weiter auf eine redirect.php-Seite, wo Username und Passwort mit MD5-verschlüsselten DB-Einträgen verglichen werden; Username und Passwort werden zudem durch mysql_real_escape_string() geschickt. In der redirect.php wird außerdem über $_GET['sid'] die von der index.php kommend an die URL angehängte Session-ID mit der gestarteten Session verglichen.
Schließlich wird noch geschaut ob der "Login"-Cookie vorhanden ist, d.h. ob man auch wirklich über die index.php auf die redirect zugreift. Er wird nach Prüfung wieder gelöscht.
Fehlt irgendwas an diesen Daten oder ist inkorrekt, gibt die redirect.php eine Fehlermeldung raus, zerstört die Session und verweigert den Login. Über Header:Location wird man auf die öffentliche Startseite der Page geleitet. Gibt ein User 3x falsches Passwort ein, wird der Account temporär deaktiviert; Mail an Admin, der neu freischalten muss (und nur admin kann das).
Ist mit den Daten alles ok, wird man eingeloggt und die Session-ID wandert in die DB. Gleichzeitig wird ein Timestamp in die DB gesetzt; ist der User nach dem Einloggen zu irgendeinem Zeitpunkt 10 Minuten inaktiv, wird er beim nächsten Seitenaufruf automatisch rausgeworfen.
- php-Seiten im Login-Bereich:
Auf jeder folgenden Seite im Login-Bereich ist oben im Quelltext eine authorize_user.inc eingebunden. Diese überprüft fortwährend, ob der User nicht nur rechtmäßig eingeloggt ist, sondern ob er auch die Rechte hat, um php-Seiten dieser Unterkategorie anzeigen zu lassen (nicht jeder darf Meldungen verfassen und umgekehrt nicht jeder die Terminliste bearbeiten). Berechtigungen für die Kategorien stehen in der DB, gleiche Tabelle wie User und passwort.
Erkannt wird der User jeweils an einem Cookie mit seinem Realname, der auch in der DB steht (auch hier Vergleich unter Verwendung von mysql_real_escape_string() ). Das allein wars aber nicht, die aktive Session wird mit dem SessionID-Eintrag in der DB verglichen; der Realname-Cookie hat außerdem ne Ablaufzeit von 10 Minuten und wird nur erneuert wenn in dieser Zeit ne Seite neu aufgerufen wird. Um vor manipulierten Ablauf-Werten zu schützen, fliegt ein User per Timestamp-Vergleich eh raus wenn 10 Minuten inaktiv. Außerdem wird Multiple User Login über Vergleich mit der SessionID in der DB unterbunden; tritt dies auf, fliegen "beide" User raus.
Was haltet ihr davon? Irgendwas zu unsicher, irgendwas redundant? Das Thema Sicherheit ist wie gesagt noch voll "in Arbeit" auf meiner Page und ich bin für alle Anregungen offen.
Viele Grüße, Karsten
Mein Login-Bereich ist fast fertig, aber ich bin mir bei der Sicherheit noch nicht ganz sicher Ich will einfach nur mal ein paar Kommentare von euch wie ihr jetzt die Sicherheit einschätzt. Folgendes mal zur Beschreibung wie das bei mir läuft:
- Login mit Username und Passwort über ne etwas versteckte Index-Seite (taucht nicht in der normalen Menüleiste auf); Session wird hier bereits gestartet. Alle Seiten im Login-Bereich haben das meta-Tag "robots"-"noindex". und sonst keine Meta-Tags. Es wird ein Cookie "Login" gesetzt, der keine weiteren Informationen beinhaltet sondern "einfach erstmal nur da" ist.
- Login-Formular leitet weiter auf eine redirect.php-Seite, wo Username und Passwort mit MD5-verschlüsselten DB-Einträgen verglichen werden; Username und Passwort werden zudem durch mysql_real_escape_string() geschickt. In der redirect.php wird außerdem über $_GET['sid'] die von der index.php kommend an die URL angehängte Session-ID mit der gestarteten Session verglichen.
Schließlich wird noch geschaut ob der "Login"-Cookie vorhanden ist, d.h. ob man auch wirklich über die index.php auf die redirect zugreift. Er wird nach Prüfung wieder gelöscht.
Fehlt irgendwas an diesen Daten oder ist inkorrekt, gibt die redirect.php eine Fehlermeldung raus, zerstört die Session und verweigert den Login. Über Header:Location wird man auf die öffentliche Startseite der Page geleitet. Gibt ein User 3x falsches Passwort ein, wird der Account temporär deaktiviert; Mail an Admin, der neu freischalten muss (und nur admin kann das).
Ist mit den Daten alles ok, wird man eingeloggt und die Session-ID wandert in die DB. Gleichzeitig wird ein Timestamp in die DB gesetzt; ist der User nach dem Einloggen zu irgendeinem Zeitpunkt 10 Minuten inaktiv, wird er beim nächsten Seitenaufruf automatisch rausgeworfen.
- php-Seiten im Login-Bereich:
Auf jeder folgenden Seite im Login-Bereich ist oben im Quelltext eine authorize_user.inc eingebunden. Diese überprüft fortwährend, ob der User nicht nur rechtmäßig eingeloggt ist, sondern ob er auch die Rechte hat, um php-Seiten dieser Unterkategorie anzeigen zu lassen (nicht jeder darf Meldungen verfassen und umgekehrt nicht jeder die Terminliste bearbeiten). Berechtigungen für die Kategorien stehen in der DB, gleiche Tabelle wie User und passwort.
Erkannt wird der User jeweils an einem Cookie mit seinem Realname, der auch in der DB steht (auch hier Vergleich unter Verwendung von mysql_real_escape_string() ). Das allein wars aber nicht, die aktive Session wird mit dem SessionID-Eintrag in der DB verglichen; der Realname-Cookie hat außerdem ne Ablaufzeit von 10 Minuten und wird nur erneuert wenn in dieser Zeit ne Seite neu aufgerufen wird. Um vor manipulierten Ablauf-Werten zu schützen, fliegt ein User per Timestamp-Vergleich eh raus wenn 10 Minuten inaktiv. Außerdem wird Multiple User Login über Vergleich mit der SessionID in der DB unterbunden; tritt dies auf, fliegen "beide" User raus.
Was haltet ihr davon? Irgendwas zu unsicher, irgendwas redundant? Das Thema Sicherheit ist wie gesagt noch voll "in Arbeit" auf meiner Page und ich bin für alle Anregungen offen.
Viele Grüße, Karsten
Kommentar