- Der User gibt auf einem Formular Name und Passwort ein.
- Aus einer mySQL-Datenbank wird geprüft, ob die beiden Werte zusammenpassen.
- (Passwort ist in der DB im Klarnamen geschrieben! Ein Fehler?)
Jein, genau genommen kommt es darauf an, wie sicher die Datenbank ist. Grundsätzlich solltest Du aber doch lieber eine Verschlüsselung oder noch besser Prüfsumme statt des Passworts benutzen. MySQL bietet dafür unter anderem die eingebaute SQL-Funktion MD5(), der Programmieraufwand beschränkt sich deshalb auf das Austauschen von "passwort=[eingabe]" durch "passwort=md5([eingabe])" bei insert und select. Gemessen an der zusätzlichen Sicherheit ist es eigentlich schon sträflicher Leichtsinn, diese fünf zusätzlichen Zeichen pro SQL-Befehl nicht einzutippen.
- Wenn richtig, wird ein Cookie anhand oberen Codes gesetzt, mit dem Usernamen als Value. Das Cookie verliert die Gültigkeit beim Schließen des Browsers.
Das ist Mist.
- Kann man das Cookie fälschen? Im Endeffekt steht ja nur der Username drin. Wenn man es fälschen kann, kann ich mich ja leicht für einen bestimmten User ausgeben - das Passwort brauch ich dann ja nicht...
Überlege doch mal: Was hindert Dich als furchtbar böser Wicht[tm] daran, in Deinem Browser einen Cookie mit einem beliebigen Usernamen zu erzeugen, wo Cookies von Browsern doch als Klartextdateien gespeichert werden? Gar nichts.
- Wie sähe ein "besseres" Cookie aus? Laut Codeschnipsel wird nur Username reingeschrieben. Im Cookie selbst sieht man noch ein paar Zahlen, woher kommen die denn?
Eventuell siehe unten, ansonsten können es auch andere interne Daten sein (meinetwegen die letzte aufgerufene Seite oder sonstwas).
- Wie siehts mit der SQL-Datenbank und Passwort im Klarnamen aus? Was wäre die Alternative?
Siehe oben.
- Ich lese immer von Session-Ids, was müsste ich denn damit machen? Da hatte jede Seite eine andere Meinung.
Diese IDs sind eindeutige Nummern, die pro Sitzung vergeben werden. Da sie von einem Zufallsgenerator erzeugt werden und ellenlang sind, lassen sie sich nicht erraten.
Beim Anmelden erzeugst Du nach Prüfung von Name und Passwort eine solche ID, speicherst sie auf dem Server (mit Verweis auf den Benutzernamen) und als Cookie im Browser. Beim nächsten Seitenaufruf bekommt der Server diese ID wieder zurückgeliefert und kann anhand der bei ihm gespeicherten IDs herausfinden, welcher Benutzer da gerade am Werk ist.
Achte darauf, dass der Server zusammen mit der ID auch eine Verfallszeit von vielleicht 10 Minuten speichert, so dass niemand nach drei Tagen mit einer zufällig aufgeschnappten ID eine Sitzung kapern kann.
Ausser der Session-ID müssen keine weiteren Daten im Cookie gespeichert werden, auch der Benutzername kann über die ID aus der internen Datenbank geholt werden.
Unter http://search.cpan.org/search?query=Session&mode=all findest Du passende Unterstützung.