Hallo,
ich habe ein Perl-Script (Web-Applikation) mit Zugriff auf eine mySql-Datenbank auf einem Apache-Server laufen, bei dem User auf bestimmte (fuer sie bestimmte) Daten zugreifen koennen. Es wird unterschieden zwischen Daten fuer einzelne User und Daten fuer ganze User-Gruppen.
Um festlegen zu koennen welche Daten angezeigt werden sollen habe ich auf der Startseite ein Formular wo die User Login und Passwort eingeben muessen.
Der Login und das verschluesselte Passwort werden dann mit der Datenbank verglichen.
Wenn diese falsch sind kommt erneut die Startseite mit einer Fehlermeldung. Andernfalls wird mit folgender Funktion eine Sessin-Id generiert:
sub getSid
{
my $zeit = time;
my @sidChars = (0..9,'B'..'Z'); # Zeichen fuer SID
my $pid = $$;
srand($zeit);
my $sid = "";
for (my $i = 0; $i++ < 10;)
{
$sid .= $sidChars[rand(@sidChars)];
}
$sid = "${pid}A$sid";
return ($sid)
}
Fuer die SID wird jetzt ein SID-File auf dem Server angelegt. Hier steht u.a. die USER-ID und die Gruppen-ID. Alle Scripts lesen jetzt hier die User-Daten aus und ueberpruefen wenn noetig ob der User Zugriffsrechte fuer die anzuzeigenden Datensaetze hat.
Diese Session-Id wird jetzt immer bei allen Links und Formularen (mit hidden Feld) weitergegeben und jedesmal auf gueltige Zeichen und korrekte Laenge ueberprueft.
Die Files zu den einzelnen SIDs werden entweder durch Klick auf einen Logout-button geloescht, oder wenn sie laenger als eine Stunde nicht veraendert wurden (wird vor jedem Zugriff abgeprueft und dann gegebenenfalls geloescht).
Jetzt wuerde mich folgendes interessieren:
- ist das Loesungskonzept einigermassen sicher?
- Waere es ein Sicherheitsrisiko, die Login-Daten und/oder die SID in Cookies abzuspeichern?
- ist die SID eindeutig, bzw. nicht von aussen nachvollziehbar oder leicht knackbar?
- gibt es sonst noch irgendetwas zu beachten?
- wie wird es bei anderen Webseiten gemacht? auch so aehnlich wie ich es mache, oder ganz anders?
mfG,
steckl