Ben veritabanında şifre karma depolama görmek, ancak veritabanında düz metin diğer okuyucuların yararına, never deposu şifreleri. Sen olmak istemiyorum like Monster.com.uk!
Sen daha güçlü bir müzakere işlevini kullanmanız gerekir MD5()
. İdeal SHA256 kullanmalısınız. Bu karma yöntem hash()
a> işlevini kullanarak PHP mevcuttur.
Ayrıca şifre rastgele bir salt başvurmalıdır. Her kullanıcının hesabı için farklı bir tuz değer depolamak. Bu sözlük saldırıları ve rainbow table saldırıları yenmek için yardımcı olur.
Sen mysqli uzantısı yerine eski mysql uzantısı kullanmayı öğrenmek gerekir. Mysqli parametreli sorguları destekler, böylece bazı SQL enjeksiyon saldırıları için güvenlik açığı azaltabilir.
İşte bazı örnek kod. Ben henüz denemedim, ama bu çalışma oldukça yakın olmalıdır:
$input_login = $_POST['login'];
$input_password = $_POST['password'];
$stmt = $mysqli->prepare("SELECT password, salt FROM customer WHERE login = ?");
$stmt->bind_param("s", $input_login);
$stmt->execute();
$stmt->bind_result($password_hash, $salt);
while ($stmt->fetch()) {
$input_password_hash = hash('sha256', $input_password . $salt);
if ($input_password_hash == $password_hash) {
return true;
}
// You may want to log failed password attempts here,
// for security auditing or to lock an account with
// too many attempts within a short time.
}
$stmt->close();
// No rows matched $input_login, or else password did not match
return false;
Diğer bazı insanlar sorgu login = ? AND password = ?
için test etmelidir öneririz ama bunu sevmiyorum. Bunu yaparsanız kullanıcı yanlış parola sağlanan çünkü oturum açma var, ya yoktu çünkü arama başarısız olursa, siz bilemezsiniz.
Tabii ki başarısız oturum açma girişimini neden kullanıcıya ortaya çıkarmayacaktır, ama you bilmeniz gerekebilir, bu nedenle şüpheli etkinlik giriş yapabilirsiniz.
@ Javier veritabanından şifre (ya da bu durumda parola hash) almak olmamalıdır onun cevabını diyor. Ben aynı fikirde değilim.
Javier çağrı md5()
PHP kodu ve gönderme gösterir veritabanına çıkan karma dize. Ama bu kolay şifreyi tuzlama desteklemiyor. Eğer PHP karma yapabilirsiniz önce bu kullanıcının tuz almak için ayrı bir sorgu yapmak zorunda.
Alternatif veritabanı sunucusu PHP app ağ üzerinden plaintext şifresini gönderiyor. Ağınızı telekulak herkes bu şifreyi görebilirsiniz. SQL sorguları açmış olan varsa, günlüklerine erişim kazanır herkes şifresini görebilirsiniz. Motive bilgisayar korsanları bile çöplüğü dalış eski dosya sistemi yedekleme ortamını bulmak için, ve günlüğü okumak olabilir bu şekilde dosyaları olabilir!
Daha az risk, PHP app içine veritabanından şifre karma dize getirme (aynı zamanda PHP kodu) kullanıcının giriş karma karşılaştırın, ve daha sonra bu değişkenleri atmak etmektir.