Çerezleri kullanma Güvenli Üye Girişi

4 Cevap php

Depolamak username & password bir çerez iyi bir uygulama içinde kullanıcı? Gerçekten gibi büyük web siteleri (Facebook, digg, twitter) bu işlemek nasıl bilmek istiyorum. Benim kod böyledir:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

?>

Her başarılı girişten sonra ben bir tanımlama $username saklamak ve $password (md5). Ve session_regenerate_id() ile oturum kimliğini yeniden


Ve aksi takdirde ben çerezleri kimlik doğrulaması, bir oturumda varsa ben kontrol kullanıcının kimliğini doğrulamak için.

Herhangi bir fikir? Teşekkürler

4 Cevap

Biraz kafam karıştı - PHP oturumları veya çerezleri kullanıyorsunuz?

Bir oturumda ($_SESSION['username'] = 'Tom' vs) veri depolamak, veri kullanıcı çerez saklanmaz.

(Otomatik oturum açma gibi bir şey için) ayrı bir çerez veri depolamak, bunun yerine farklı, rasgele id saklamak istediğiniz, ve kullanıcı kimliği, bir veritabanı tablosu bakmak olabilir.

autologins
----------
key (random hash)
user_id
expires

Joel L's cevabı iyi biridir. Ben eklemek istiyorum tek şey yerine rastgele bir kimliği, bunu daha güvenli hale getirmek için kullanıcıyı tanımlayan bazı ekstra bilgi eklemek olmasıdır.

Örneğin, kullanıcının IP adresi ve bir tuz karma kullanmak birisi kullanıcının güvenlik çerez çalmak veya koklama karşı ekstra güvenlik sağlar.

Ben twitter sadece kalıcı bir anda bir bilgisayardan Twitter'da oturum açmış olabilir neden olan, böyle bir şey kullanır sanıyorum.

Sadece bir md5 yeterli değildir, en azından sizin veritabanında depolamak rastgele bir 'tuz' (karakter küçük bir rasgele dize) içermelidir.

Edit: BTW, şifre düz metin veya şifreli saklamak mı? Bu büyük bir güvenlik riski olabilir.

Standart uygulama, bir tanımlama kullanıcıya kendinizi veya PHP oturumları kullanılarak ya bir oturum kimliği vermektir. Bir tanımlama kullanıcı adı ve şifre karma saklama hala bazı siteler tarafından yapılır, ama ben eski tercih edilir. Bu, kullanıcıların oturum açma üzerinde daha fazla kontrol sağlamak için izin verir, bu yüzden onlar, örneğin vardır onlar kaç seans görmek ve hangi IP olabilir - için iyi bir örnek GMail bkz.

Tuzları ve karma bir konuda, veritabanı tuzlu olarak şifre sağlamalarının saklamak gerekir. İdeal olarak, tuz, her bir kullanıcı için farklı olmalıdır. Veritabanı çalınması veya maruz durumunda, bu hepsi uzun bir zaman alır tuz, için gökkuşağı tabloları yaratacaktır aynı tuzu kullanılırsa (şifreleri almak için bir saldırgan için bir LOT daha zor hale getirecek, ama izin istiyorum Onları daha sonra) oldukça hızlı bir şekilde şifreleri kırmak. Güvenlik için tuzu da% $ & ^ gibi bazı sivil alfanümerik karakterler içermelidir.