Şifre Doğrulama

5 Cevap php

Mysql ve php kullanarak

(Tabii, hijyen sonra) kullanıcı adı ve şifrenizi kullanarak ve hiçbir satır kullanıcı adını kullanarak veritabanı sorgulama ve sonra dönüşünü karşılaştırarak vs döndürülen bir girişimi başarısız kayıt veritabanını sorgulamak için bir parola kontrol herhangi bir nedenle / değeri var mı şifre dize?

EDIT: Aşağıda belirttiğimiz isteyenler için, evet şifre veritabanında kadar sağlaması.

5 Cevap

Seni doğru anlama ediyorum eğer sonuçlarını karşılaştıran arasında bir fark varsa, merak ediyorsanız:

$results = mysql_query("SELECT name FROM users WHERE name = $properlyEscapedName AND pass = $properlyEscapedPassword");
if (mysql_num_rows($result) == 1)
    $authenticated = true;

karşı

$results = mysql_query("SELECT name, pass FROM users WHERE name = $properlyEscapedName");
$array = mysql_fetch_assoc($results);
if ($array["pass"] == $unescapedPass)
    $authenticated = true;

Ben güvenlik nedenleriyle düz metin parolaları daha şifre sağlamalarının depolamak için daha iyi olduğunu unutmayın, ancak aksi gördüğüm tek fark birinci durumda size sunucu arasındaki bant genişliğinin daha verimli kullanılması anlamına gelebilir ki, bir daha az alan dönmek olacaktır veritabanı. Muhtemelen daha küçük sonuç kümesinin küçük yarar azaltır, böylece diğer taraftan, sorgu, birkaç bayt büyüktür.

Ben burada 2 soru görüyorum.

  1. Veritabanına karşı herhangi bir bilgi kontrol etmek için genel bir yol yapmak için veritabanı yapmaktır. Yani, sorgu içine giriş ve şifre hem de koydu. Biz karma saklamak Özellikle, bir parola kendisi
  2. Parola tahmin koruması herhangi bir yetkilendirme sistemi için değerli bir ektir.

Sen saldırılara karşı kullanıcı ve korunmasına verilen bilgi arasında bir trade-off var.

Eğer giriş ve şifre tekabül kontrol veritabanını sorgulamak ve başarısız olursa, sadece giriş ya da şifre ya da hatalı olduğunu kullanıcıya söyleyebilirim. O kayıt için kullanılan giriş hangi hatırlıyorum yoksa yardım değil (bu "Arkh01", "Arkh" veya "Arkh1" idi).

Eğer giriş için veritabanını sorgulamak eğer giriş yanlış veya parola ise, karma ve tuz alma kullanıcıyı söyleyebilirim. Kullanıcı mutlu. Ama web sitenize saldıran birisi kullanıcı "aa" var olmadığını kolayca öğrenebilirsiniz, ancak kullanıcı "ab" yapar. Web siteleri sürü lisdesine erişim vermek gibi, hemen her zaman bu kaygıyı sayabilirsiniz.

BruteForce önlemek için, bir IP veya bir oturum üzerinde yapılan deneme sayısını oturum ve 5ish hatalardan sonra başka girişimi engellemek. Tercihen kullanılan IP değil, hesap bloke.

Karma şifreleri saklama hakkında, tuz kullanımı ve php hmac + sha512: hash_hmac

İki yöntem arasındaki fark temelde yok. Her iki yöntem şifre adı eşleşmiyor eğer bildireceğiz.

Yapmanız fazla iş / uzun Başarısız bir oturum açma girişiminden sonra bir bağlantıyı açmak tutun, daha size bir DOS saldırısı kendinizi açık bırakın. Otoh kaba kuvvet arama önlenmesi karşı bu denge gerekir.

Bir çerez olmadan bir kullanıcı adı ve şifre göndermek için çalışırsanız - - otomatik olarak onu başarısız - bir mesaj ile bir akıllı çözüm kullanıcı oturum açma sayfasına alır önce (cookie damla şifrelenmiş bir tanımlama başarısız girişimler istemci tarafında sayısını itmek çerezler) etkin olmalıdır ki. Oturum açma başarısız olursa 3 ardışık hataları herhangi bir girişimde başarısız sonra, yeni bir çerez damla hataları ve yeniden şifrelenmesi artırmak.

Bu tamamen kaba kuvvet saldırıları önlemek ama onları çok daha zor hale getirir.

C.