Anmeldung mit Session-Cookie

Browsersitzung mit Name und Passwort

Der hier vorliegende Artikel beschreibt die Verwendung eines Session-Cookie der bei jedem Folgerequest einen einmal angegebenen Benutzernamen und Passwort zurück an die Authority sendet. Dabei wird der Session-Cookie nur solange im Browser gehalten wie dieser geöffnet ist.

Formular zum Anmelden

Damit der Benutzer seine Zugangsdaten (Credentials) eingeben kann, muss zunächst ein Formular vorliegen. Die Request-Method sollte unbedingt als POST realisiert werden, damit die Credentials nicht im URL sichtbar werden und die Übertragung sollte über einen Secure Socket Layer (SSL) erfolgen. Damit ist sicherheitstechnisch alles abgesichert. Nach dem Absenden werden Benutzername und Passwort serverseitig validiert. Sofern sich der Benutzer erfolgreich ausgewiesen hat, sendet der serverseitige Prozess einen Cookie, also einen zusätzlichen Response-Header mit ebendiesem Benutzernamen und Passwort zurück zum Browser

Set-Cookie: userpass=name|password

Da dieser Cookie kein Ablaufdatum enthält, verfällt er mit dem Schließen des Browsers, ist also nur über eine Session gültig. Bei jedem Folgerequest an die gleiche Authority (Domäne) sendet der Browser Benutzername und Passwort über den Cookie, das heißt daß der Benutzer seine Zugangsdaten nicht jedesmal neu eingeben muss wenn der die URL wechselt. Der Benutzer kann also, hat er sich auf diese Art und weisen einmal angemeldet, weitere Daten an die Authority senden oder Seiten abrufen die nur nach einer erfolgreichen Anmeldung zugänglich sind.

Serverseitige Programmiertechnik

Es gibt zwei Fälle zur Parameterkontrole. Einmal wäre zu prüfen ob die gesendeten Credentials richtig sind, also wenn zur Anmeldung die Formulardaten gesendet werden. Zum Anderen ist stets zu prüfen, ob der Client den Cookie sendet mit userpass=name|password. Letzeres muss an einer anderen Stelle erfolgen, nämlich da wo entschieden wird was ein bestimmter Benutzer tun darf, wozu er berechtigt ist.

Wert des vom Browser gesendeten Cookie ermitteln:

require CGI::Cookie; my %cookies = CGI::Cookie->fetch; my $userpass = $cookies{userpass} ? $cookies{userpass}->value : '';

MD5 Hash Benutzername Passwort

select md5('NamePasswort') as userpass 'userpass' => '8a3a78e251ff5ac05db08c185bbe288d'

Anstelle Benutzername Passwort im Klartext wird dann nur diese MD5-Checksumme im Cookie übertragen. Serverseitig verglichen wird nur diese Checksumme die dafür als Primary Key in der Datenbank/Benutzertabelle vorliegen muß.

Dauer einer Session begrenzen

Für den Cookie gibt es den Parameter expires. Damit kann man festlegen, wann der Cookie abelaufen ist, bspw. nach 10 Minuten:

$self->header( "Set-Cookie" => "sid=8a3a78e251ff5ac05db08c185bbe288d; expires=".$self->http_date(time + 600) ); sid=8a3a78e251ff5ac05db08c185bbe288d; expires=Mon, 11 Nov 2024 15:59:17 GMT

Abmelden

Da es keine Möglichkeit gibt, den Browser anzuweisen seine Cookies zu löschen bleibt nur die Möglchkeit, für den Session-Cookie einen anderen Wert zu setzen: Set-Cookie: userpass= und die Seite neu zu laden.


Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.