"Stay in açmış" merkezli bir tanımlama yapmak için en güvenli yolu nedir?

4 Cevap

Hi what is the securest way to do a "stay logged in" feature?

i deposunda kullanıcı günlükleri kendi kimliği, zaman damgası ve bir tanımlama timestamp + salt + hash of their pw bir karma düşünme düşünmek. onlar yanındaki siteyi ziyaret ettiğinizde cookie timestamp + salt + hash of their pw bir karma geçerli olup olmadığını, daha sonra kontrol

(Yani .. mysql_real_escape_string arasında (denenmemiş ve görmezden eksikliği ())

(Bu php olan)

 /*
 cookie contains these fields:
 username
 timestamp
 hash
 */

 $row  = mysql_fetch_array($result); 
            ## sql would be something like select salt,
            ## username from users where user = $_COOKIE['username']

 $generated_cookie_data = my_hash_func(
            $_COOKIE['timestamp'] . 
            $row['salt_from_db'] .
             my_hash_func([$row['password'])
             )

 if ($generated_cookie_data == $_COOKIE['hash']) {
 #logged in!
 }
 else {
 #not logged in!
 }

4 Cevap

Büyük olasılıkla not bunu kendiniz yapmanız gerekir - Tekerleği yeniden icat size kötü bir tekerlek alacak. Web programlama çerçeveleri sağlamak olursa olsun oturum yönetimi kullanın. Ne, bir çerçeve kullanarak değil mi? Sonra delisin, ve size iyi şanslar diliyorum.

Sadece uzun, saf rastgele ve benzersiz bir kimlik oluşturmak. Tuz + şifre + IP üzerine dayandırmak kesinlikle gerek yoktur, nasıl önemli değil, sadece kesinlikle bir deseni (yani vb, IP, zaman damgası kullanmayın) olmamalıdır. Sütun session_id (PK) ve user_id (FK) (ve gerekirse daha fazla bir veritabanı tablosu user_session var gibi session_ttl, user_ip ve benzeri). Bir oturum kimliğini oluşturmak ve bu tablo olmadığını denetlemek. Değilse, o zaman tabloda kullanıcı kimliği ile birlikte kaydedin. Bir uzun süredir yaşıyorum çerez aynı oturum kimliğini saklamak ve her yeni istek üzerine kontrol.

Ben karma IP adresini içermelidir düşünüyorum. Başka bir kullanıcı bir şekilde çerez çaldı eğer Bu şekilde, onlar oturumuna erişim olmazdı.

Daha güvenli bir yöntem, her seferinde kullanıcı günlükleri rasgele bir kimlik oluşturmak ve kullanıcı tabloda o saklamak olacaktır. Sonra hash random + salt + password + ip.

IMO Eğer Kullanıcıların şifre (hatta bir karma) hakkında bilgiler ortaya asla. Birisi bu karma erişiminiz var ise onlar kullanıcıların şifreyi tahmin at gibi onlar kadar birçok kez deneyebilirsiniz. Onlar size rasgele tahmin hesaplarını korumak için herhangi bir güvenlik mekanizması ile sınırlı değildir.

Ben yaklaşım kullanarak olsaydı ben en azından onun yerine şifreyi kullanarak db depolanan bir rastgele sayı yaratacak açıklar.