• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Loginsystem: Was soll in das Cookie?

sin777

Neues Mitglied
Hallo Community,

ich versuche gerade ein Loginsystem mit php und Cookies zu programmieren. Allerdings bin ich mir nun ziemlich unsicher, was ich im Cookie speichern soll, um den Benutzer zu identifizieren. Einfach die Benutzer-ID oder den Loginnamen ist doch absolut unsicher oder? Die ID kann der Client ja einfach manuell im Cookie ändern, oder?

Also, was könnte ich in dem Cookie speichern um den User auf sichere Weise zu identifizieren?


Viele Grüße und vielen Dank im Voraus :)
 
Werbung:
Werbung:
Passt vielleicht nicht ganz zum Thema aber ich habe mein Loginsystem mit Sessions gemacht. Die können client-seitig (also vom user) nämlich nicht verändert werden. Das heißt du kannst den Usernamen darin speichern.
 
Ich weiß, dass ich auch Sessions verwenden könnte.

Es geht mir nur um Folgendes: Ich habe ein Buch über PHP-Programmierung, in dem gesagt wird, ich solle das Passwort nicht im Cookie speichern, denn das wäre unsicher. Gleichzeitig wird einfach die ID im Cookie gespeichert und es heißt dann, dass das sicher sei. Kann es sein, dass es wenn der client das cookie sendet noch irgendeine serverseitige überprüfung gibt?


Danke :)
 
Werbung:
Kann mir niemand sagen, warum dieses buch sagt, es sei unsicher passwörter in cookies zu speichern aber wiederum sicher, die benutzer-ID/Name zu speichern? Kann man vllt doch nicht einfach in das cookie reingehen und irgendwelche daten austauschen?
 
Ich würde weder das eine noch das andere als Cookie speichern. Ich würde einen Sicherheitscode für den Datensatz des Logins erstellen (irgendein String mit 20 bis 40 völlig beliebigen, zufälligen Zeichen) und diesen im Cookie speichern. So könnte jemand, der das Cookie anguckt, keinen personenbezogenen Code aus der Programmierung der Webseite sehen.
 
Werbung:
Das Ganze ist sinnlos. Nimm einen anständigen Hoster, der dir ein valides SSL/https Zertifikat zur Verfügung stellt.
Ein zufälliger Sicherheitscode kann genauso Opfer eines Hijackings werden. Das einzige Risiko, eine zufällige Session-Id zu speichern, ist, dass ein Angreifer das Passwort im Klartext sehen kann. Was aber genauso passieren kann bei einem Login-Formular.
 
Das Ganze ist sinnlos. Nimm einen anständigen Hoster, der dir ein valides SSL/https Zertifikat zur Verfügung stellt.
Ein zufälliger Sicherheitscode kann genauso Opfer eines Hijackings werden. Das einzige Risiko, eine zufällige Session-Id zu speichern, ist, dass ein Angreifer das Passwort im Klartext sehen kann. Was aber genauso passieren kann bei einem Login-Formular.

Was hat das Ganze mit SSL zu tun? Es geht ja darum, dass die Cookies beim Client manipuliert werden, um sich so im Namen eines anderen einzuloggen.

Was man noch machen könnte, wäre sowohl den Loginnamen als auch das versschlüsselte(!) Passwort mit zu speichern. Da kann man ja dann kaum noch was machen, oder?
 
Moin,
ich würde das ganze Cookie verschlüsseln, egal was drin steht.
Für sowas gibts mcrypt_encrypt und mcrypt_decrypt in PHP.
Das kann dann keiner mehr manipulieren.

Beispielcode:
PHP:
function encryptCookie($value, $key){
   if(!$value){return false;}
   $text = $value;
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
   return trim(base64_encode($crypttext));
}

function decryptCookie($value, $key){
   if(!$value){return false;}
   $crypttext = base64_decode($value);
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
   return trim($decrypttext);
}

// Beispielkey für die Verschlüsselung (32bit lang)
$enc_key = "1Kg5kCCOSIk0v%iD9VFQMcxiKvF51aYk";

// Verschlüsseltes Cookie setzen:
// z.B. so
$cookieData = $userName."--||--".$passWord;
setcookie("myCookie", encryptCookie($cookieData, $enc_key),  time()+60*60*24*30, "/", ".example.com");

// Verschlüsseltes Cookie auslesen:
$cookieData = split("--||--",decryptCookie($_COOKIE['myCookie'], $enc_key));

//Username:
$cookieData[0]
//Passwort:
$cookieData[1]
Der Inahlt des Cookies sieht dann in etwa so aus:
P18lCr87Wuzl0TpcDVLBcV+LgOX3Sv0KS55FUVDOOEI=

Du kannst natürlich auch alles mögliche in das Cookie schreiben und auch Benutzername und Passwort in ein eigenes Cookie schreiben.

MfG
 
Werbung:
Was hat das Ganze mit SSL zu tun? Es geht ja darum, dass die Cookies beim Client manipuliert werden, um sich so im Namen eines anderen einzuloggen.

Was man noch machen könnte, wäre sowohl den Loginnamen als auch das versschlüsselte(!) Passwort mit zu speichern. Da kann man ja dann kaum noch was machen, oder?

Komm mal runter, denn hast offenbar keine Ahnung, wovon du redest. Cookie-Manipulation ist das Eine, aber HTTP-Header-Hijacking kann genauso die Cookies einer Session-Id auslesen, wie ein eventuell gespeicherter Benutzername und Passwort.
SSL/https ist die einzige Möglichkeit, sich effektiv davor zu schützen. Dass man einen Benutzer nicht mit einem Cookie anmeldet, in dem der Benutzername steht, ist natürlich klar. :roll:
 
Zurück
Oben