Hi CIT,
Ich würde euch gerne mein Login-System(in PHP) vorstellen und hoffe ich bekomme reichlich Feedback.
Gut. Auf gehts.
Die Passwörter sind 2x MD5 Gehasht + Salt in einer MySQL Datenbank
Ich denke, erst Salt und dann gehasht waer effizienter ;-)
Die Authentifizierung läuft so ab:
- Das Cookie wird ausgelesen
- Das Konstrukt entschlüsselt
- Ist der Salt der richtige? Wenn ja - okay
- Ist EXPIRATION < time() ? Wenn nein - okay
- Ist eine UserID vorhanden? Wenn ja - okay
Haaalt. Das ist schlecht. Wenn jemand - warum auch immer - Deinen Salt (und das Format des Cookie-Keys) kennt, dann kann er sich wahllos authentifizieren, ohne sich je einloggen zu muessen. Er muss keinerlei Passwort kennen - Id raten (eine existierende ID zu raten duerfte leicht sein), Salt und ein passendes Expiry Date dran, Cookie produzieren, fertig.
Wenn Du einen Schuessel in ein Cookie schreibst, dann speichere ihn auch serverseitig. Und von da an zaehlt beim Authentifizieren _nicht_, ob der Schluessel irgendwie in sich Sinn macht, sondern __nur__, ob der Server ihn bereits kennt, weil er ihn hoechstpersoenlich generiert hat.
Und alle Informationen ueber den User (ID, Expiry) speicherst Du serverseitig dazu. Die haben im Cookie nichts verloren, der Wert des Cookies muss zufaellig (was immer das heisst) sein. Grund: Wenn mir ein abgelaufenes Cookie in die Haende faellt, ist es damit wertlos.
In Deiner Konstruktion hingegen kann ich mir ein Cookie nehmen, mir 1000 Jahre Zeit nehmen und es entschluesseln, dann kenne ich den Salt und das Format des Keys und kann ein Cookie selbst erzeugen, das Dein Script als Authentifizierung akzeptiert.
Was haltet ihr davon, habt ihr noch ein paar Anregungen?
Noch eine Frage:
[...] da ich somit komplett auf Sessions verzichten kann [...]
Warum willst Du das?
Viele Gruesse,
der Bademeister