Dokumentation zum Apache-Modul "mod_login"

Springe zu: Seitenhierarchie.

Installation und Debug

Konfiguration
/etc/apache2/mods-enabled/login.conf
Serverkonfiguration
LoginSecret Aktuelles-Geheimnis [Altes-Geheimnis]

Nur wer das Geheimnis kennt, kann die Prüfsumme berechnen und gültige Cookiewerte erzeugen. Zur Berechnung wird das aktuelle Geheimnis genutzt, nachgerechet wird mit aktuellem und altem Geheimnis.

Bei einem Wechsel des Geheimnisses sollte man den alten Wert als altes Geheimnis bewahren, bis alle mit dem alten Geheimnis erzeugten Cookies abgelaufen sind.

LoginCookieName Name
Sie müssen einen Namen für das Login-Cookie wählen.
Directory, Location und .htaccess
LoginCheckedIpBits 0..32

Das Login-Cookie kann an die IP-Adresse oder das Netz des Besuchers gebunden werden. Das erhöht die Sicherheit, denn es macht ein irgendwie abgehörtes Cookie für den Angreifer wertlos.

Der Nacheil: wenn ein Besucher mit dynamischer IPs nach einer DSL-Zwangstrennung eine neue IP zugeordnet bekommt, wird sein Login-Cookie wertlos.

LoginRequired on/off
Mit LoginRequired on konfigurierte Bereiche sind nur mit gültigem Cookie zugänglich. Besucher ohne gültiges Login-Cookie werden auf eine Login-Seite umgeleitet oder mit einem Fehler 403 abgewiesen.
LoginRedirectUri Uri
Verbotene Zugriffe werden auf diese Url umgeleitet. Die verbotete Url wird urlencoded angehängt.
LoginMaxDuration Sekunden
Als zusätzliche Sicherheit kann das maximale Alter eines Cookies beschränkt werden. Die Login-Cookies enthalten Erstellungszeit und Ablaufzeit. Wenn die Erstellung mehr Sekunden zurückliegt als hier konfiguriert, wird das Cookie unabhängig von der Ablaufzeit ignoriert.
Debug-Ausgaben
werden als HTTP-Header geliefert mit dem Prefix LOGIN_DEBUG_.

Bestandteile des Cookies:

sepa
Trennzeichen, zur Zeit: .
secret
Ein Geheimnis, zum Test: h95gd5gg78dgh9vqf8w
hexctime
Gültig ab, Zeitpunkt der Erzeugung, in Unix-Zeit 8-stellig hexadezimal.
hexetime
Gültig bis, Ablaufzeitpunkt, in Unix-Zeit 8-stellig hexadezimal.
hexip
IP-V4-Adresse, jeder der vier Zahlen hexadezimal zweistellig, ergibt 8 Stellen.
tag=val
Beliebig viele Variable=Wert-Zuweisungen.

Berechnung des Cookies:

  1. Erzeuge eine Zeichenkette aus den Rohdaten:

    $raw = "(sepa)(hexetime)(sepa)(hexctime)(sepa)(hexip)(sepa)(tag1=val1)(sepa)(tag2=val2)...(sepa)";

  2. Codiere diese Zeichenkette gemäß uchar aus RFC1738:

    $encoded = uchar_encode($raw);

  3. Erzeuge einen Klartext durch Voranstellen und Anhängen des Geheimnisses:

    $cleartext = "(secret)(encoded)(secret)";

  4. Berechne den Hash über den Klartext:

    $hash = md5($cleartext);

  5. Stelle den Hash der codierten Zeichenkette voraus, um den Cookiewert zu erhalten:

    $cookievalue = "(hash)(encoded)";

Prüfen des Cookies

Länge
Das Cookie muß mindestens 60 Byte enthalten, sonst ist es ungültig (Cookie too short).
Prüfsumme nachrechnen

Trenne die ersten 32 Zeichen vom Cookie ab als Prüfsumme checksum, der Rest sind die encodierten Daten data. Berechne mit PrimarySecret und SecondarySecret:

$hash1 = md5 ("(secret1)(data)(secret1)");
$hash2 = md5 ("(secret2)(data)(secret2)");

Wenn weder $hash1 noch $hash2 mit der checksum übereinstimmt, so ist das Cookie ungültig (Checksum wrong).

Extrahiere die Zeitstempel und die IP-Adresse

Extrahiere jeweils ab den Offsets 33, 43 und 51 jeweils eine hexadezimal codierte Zahl, und speichere die Werte als etime, ctime und ip.

Prüfe die etime:
Wenn die aktuelle Zeit (request_time) größer ist als die Ablaufzeit (etime), so ist das Cookie ungültig (Cookie expired).
Prüfe die ctime (nur wenn MaxDuration konfiguriert):
Wenn MaxDuration definiert ist, und der Zeitabstand von der Cookieerzeugung (ctime) bis jetzt (request_time) größer als MaxDuration, so ist das Cookie ungültig (Cookie too old).
Prüfe ip (nur wenn CheckedIpBits konfiguriert):

Vergleiche die Ip-Adresse aus dem Cookie (ip) mit der IP-Adresse des Klienten (remote_addr), jeweils dargestellt als 32-bit-Binärzahl.

Wenn diese sich auf den höchsten CheckedIpBits Stellen unterscheiden, so ist das Cookie ungültig (Cookie invalid for remote ip).

Werden alle Bedingungen eingehalten, so ist das Cookie gültig

tweet this share on facebook   © 2008-2017 – zuletzt geändert am 16.03.2017
Verbraucherinformation: enthält XHTML1.0, CSS und eine Anbieterkennzeichnung.

Navigation

Seitenhierarchie