rotalever
2008-06-01, 13:17:52
Hab schon das halbe Netz durchsucht, aber immer nur einfache Authentifizierungssysteme gefunden, die in etwa so funktionieren:
(z.b. http://www.php-mysql-tutorial.com/user-authentication/database.php )
Benutzername und Klartext oder Hash (wohl besser..) des Passworts sind in einer Datenbank auf dem Server gespeichert.
Der Benutzer sendet seinen Benutzernamen und sein Passwort an den Server, dort wird es gehashed und mit der Datenbank verglichen. Stimmt beides überein, so ist der Benutzer akzeptiert. Dies wird durche eine Session-Variable gespeichert, also einfach eine Session erzeugt und "logged in" oder ähnliches reingeschrieben.
Wenn der Benutzer sich ausloggt, wird diese Session wieder gelöscht.
Das kommt mir irgendwie nicht so sehr sicher vor? Muss man nicht noch darauf achten, dass die Session-id möglichst zufällig aus einem großen Wertebereich stammt, damit sie nicht so leicht ausgetested und somit "gehijacked" werden können? Oder erledigt das z.B. PHP automatisch? Wie würde man das sonst realisieren? Eine Zufallszahl generieren, die mit einem geheimen keyword(=password des users?) vermischen und dann hashen? Wäre das eine gute Session-id?
Zweitens ist es so, dass ein solcher Login nur für die jeweilige Session gültig ist. Viele Seiten bieten an, dass man eingeloggt bleibt. Soweit ich weiß wird dann das Passwort im Cookie des Browser gespeichert, oder? Das muss natürlich auch irgendwie verschlüsselt werden. Hashed man das einfach, oder macht man das komplizierter? Beim nur hashen, dürfte man aber wohl kaum den selben Hash nehmen, der auch für das hashen des Passworts in der DB verwendet wird. Oder reicht es aus, den Hash im Cookie geeignet zu salzen?
Ich habe leider keine Internetseite gefunden, die das so richtig erklärt und mich würde es schon mal interessieren, wie man das heute so macht. Natürlich muss es nicht die Anforderungen eines Systems haben, die man bei einer Bank benutzt, 100% sicher ist es zum Beispiel aufgrund der fehlenden Verschlüsselung bei der Passwort-Übertragung sowieso nicht, aber das kann man ja bei den meisten Seiten vernachlässigen.
(z.b. http://www.php-mysql-tutorial.com/user-authentication/database.php )
Benutzername und Klartext oder Hash (wohl besser..) des Passworts sind in einer Datenbank auf dem Server gespeichert.
Der Benutzer sendet seinen Benutzernamen und sein Passwort an den Server, dort wird es gehashed und mit der Datenbank verglichen. Stimmt beides überein, so ist der Benutzer akzeptiert. Dies wird durche eine Session-Variable gespeichert, also einfach eine Session erzeugt und "logged in" oder ähnliches reingeschrieben.
Wenn der Benutzer sich ausloggt, wird diese Session wieder gelöscht.
Das kommt mir irgendwie nicht so sehr sicher vor? Muss man nicht noch darauf achten, dass die Session-id möglichst zufällig aus einem großen Wertebereich stammt, damit sie nicht so leicht ausgetested und somit "gehijacked" werden können? Oder erledigt das z.B. PHP automatisch? Wie würde man das sonst realisieren? Eine Zufallszahl generieren, die mit einem geheimen keyword(=password des users?) vermischen und dann hashen? Wäre das eine gute Session-id?
Zweitens ist es so, dass ein solcher Login nur für die jeweilige Session gültig ist. Viele Seiten bieten an, dass man eingeloggt bleibt. Soweit ich weiß wird dann das Passwort im Cookie des Browser gespeichert, oder? Das muss natürlich auch irgendwie verschlüsselt werden. Hashed man das einfach, oder macht man das komplizierter? Beim nur hashen, dürfte man aber wohl kaum den selben Hash nehmen, der auch für das hashen des Passworts in der DB verwendet wird. Oder reicht es aus, den Hash im Cookie geeignet zu salzen?
Ich habe leider keine Internetseite gefunden, die das so richtig erklärt und mich würde es schon mal interessieren, wie man das heute so macht. Natürlich muss es nicht die Anforderungen eines Systems haben, die man bei einer Bank benutzt, 100% sicher ist es zum Beispiel aufgrund der fehlenden Verschlüsselung bei der Passwort-Übertragung sowieso nicht, aber das kann man ja bei den meisten Seiten vernachlässigen.