Ben kendi PHP çerçeve geliştiriyorum. Ben okudum tüm güvenlik malzemeleri yüzden güvenlik açıklarını bulmakta biraz yardım kullanabilirsiniz benden kullanıcı kimlik doğrulaması için çok farklı yöntemler kullanır gibi görünüyor.
Ben başlamadan önce faydalı olabilecek bazı bilgiler. Ben MVC url için mod_rewrite kullanmak. Parolalar her kullanıcı için benzersiz 24 karakter tuz ile şifrelenir. mysql_real_escape_string ve / veya her şey gidiyor, ve her şeyi htmlspecialchars'ın çıkan değişken tiplemeleri.
Step-by step process:
Her sayfanın üst:
session_start();
session_regenerate_id();
Kullanıcı giriş formu aracılığıyla günlükleri ise, kullanıcının MySQL üste koymak için yeni rastgele belirteç oluşturmak. Hash kullanıcının (onlar kayıtlı ilk ne zaman) tuz ve yeni simgesi üzerinde temel oluşturulur. Oturum değişkenleri karma ve düz metin kullanıcı adı saklayın, ve 'Beni hatırla' işaretli ise kurabiye çoğaltmak.
Her sayfada, kurabiye için kontrol edin. Çerezler ayarlarsanız, oturum değişkenleri içine kendi değerlerini kopyalayın. Sonra MySQL veritabanı karşı $ _SESSION ['isim'] ve $ _SESSION ['hash'] karşılaştırın. Böylece onlar tekrar giriş zorunda eşleşmiyor, tüm çerezleri ve oturum değişkenleri yok.
Giriş geçerli ise, MySQL veritabanı kullanıcı bazı bilgileri kolay erişim için bir dizi saklanır. Şimdiye kadar, ben bu dizi temiz yani kullanıcı erişimini sınırlayarak zaman o sayfa için gerekli ne altında ise erişimini user.rank ve inkar bakın farz ettik.
Ben XSS ve CSRF gibi tüm ortak saldırıları test etmek için denedim, ama belki ben sadece kendi sitesi hack yeterince iyi değilim! Aslında (güvenlik kodu yalnızca 100 satır uzunluğunda) güvenli olması için benim sistem yol çok basit görünüyor. Ne eksik?
Edit: denetleyicisi işlevlerini çağıran için SELECT sorguları başka bir şey kullanan bir şey kullanıcı rütbe şartlarına ek olarak, örneğin, bir silme onaylamak için $ _POST verileri isteyecektir.
Ben de mysql_real_escape dize ile güvenlik ararken çok zaman geçirdim ama (her şey birkaç yıl önce en az ve görünüşe göre sabit olmuştur olduğu) up-to-date herhangi bir bilgi bulamadım. Bütün bildiğim sorun kodlama ile ilgili bir şey olmasıdır. Bu sorun bugün hala varsa, onu nasıl önleyebilirsiniz?
Ben bir yere ödünç ve modifiye şifrelemek fonksiyonu:
public function encrypt($str, $salt = NULL) {
if ($salt == NULL) $salt = substr(md5(uniqid(rand(), true)), 0, 24);
else $salt = substr($salt, 0, 24);
return $salt.sha1($salt.$str);
}