Hallo,
ich bin schon wieder hier mit neuen Fragen. In meinem PHP5 Schmöker - mittleweile schon etwas in die Jahre gekommen - erfolgt die Anmeldung von Benutzern auf einer Website in etwa auf folgende Weise:
// ...
$abfrage = "select \* from benutzer where benutzername = '$benutzername' and passwort = sha1('$passwort');
$ergebnis = $db-\>query($abfrage);
$zeilen = $ergebnis-\>num\_rows;
if ($zeilen \> 0) {
$\_SESSION['benutzer'] = $benutzername;
}
if (isset($\_SESSION['benutzer'])) {
Mitgliederbereich
}
// ...
Ist diese Benutzeranmeldung noch Stand der Technik? Ich habe das Beispiel etwas erweitert, eine Anmeldung ist nur möglich, wenn der Account zuvor per E-Mail (Bestätigungslink) aktiviert wurde.
// ...
$abfrage = "select \* from benutzer where benutzername = '$benutzername' and passwort = sha1('$passwort');
$ergebnis = $db-\>query($abfrage);
$zeilen = $ergebnis-\>num\_rows;
$benutzer = $ergebnis-\>fetch\_assoc();
if ($zeilen \> 0) {
$\_SESSION['benutzer'] = $benutzername;
}
if (isset($\_SESSION['benutzer'])) {
if ($benutzer['aktivierungs\_id'] == 1) {
Mitgliederbereich
} else if ($benutzer['aktiverungs\_id'] == 2) {
Account noch nicht aktiviert
}
}
// ...
Die dazugehörige Datenbank sieht in etwa so aus:
create table benutzer
(
benutzer\_id int unsigned not null auto\_increment primary key,
benutzer\_name char(20) not null,
passwort char(40) not null,
email char(40) not null,
aktivierungs\_id tinyint unsigned not null,
aktivierungs\_code char(40) not null,
registrierung\_datum datetime not null
) engine=InnoDB default character set UTF8 collate utf8\_general\_ci;
Beim Erstellen des Accounts setze ich die Spalte aktivierungs_id auf „2“ (inaktiv) und schreibe einen zufällig generierten Code in die Spalte aktiverungs_code (mit sha1 verschlüsselt). Gleichzeitig versende ich eine Aktivierungslink an die angegebene E-Mail Adresse? Was ist denn von dieser Lösung zu halten? Ich bin leider nur ein Hobbieprogrammierer und kann daher keine professionelle Beurteilung in Sachen Sicherheit treffen. Alle GET und POST Variablen prüfe ich mit real_escape_string() und meist auch mit preg_match().
Vielen Dank, Elo!