En iyi düşünce tekerleği yeniden icat etmemek. Ancak, PHP dünyasında zaten bunu yapan yüksek kaliteli bir bileşen bulmak zor olabilir (çerçevelerin bu tür şeyleri uyguladığından ve uygulamalarının zaten test edilmiş, sağlam, kod gözden geçirilmiş vb. Olduğundan emin olabilirim). )
Mümkünse PBKDF2 veya Bcrypt kullanın . Bunun için yapıldı.
Gerekçe: Her iki algoritma da karma işlemi isteğe bağlı olarak yavaşlatabilir; bu, şifreleri toplamarken tam olarak istediğiniz şeydir (daha hızlı alternatifler daha kolay kaba kuvvet anlamına gelir). İdeal olarak, parametreleri, aynı donanımda işlem zaman içinde daha yavaş ve daha yavaş olurken yeni, daha hızlı donanım piyasaya sürülecek şekilde ayarlamanız gerekir.
Yapamazsanız , en azından MD5 / SHA1 kullanmayın. Asla. Unut gitsin . Örneğin bunun yerine SHA512 kullanın. Ayrıca tuz kullanın.
Gerekçe: MD5 ve SHA1 çok hızlı. Saldırganın karmaları içeren veritabanınıza erişimi varsa ve (özellikle de) güçlü bir makineye sahipse, bir parolanın kaba şekilde zorlanması hızlı ve kolaydır. Tuz yoksa, saldırganın gerçek parola artışını bulma olasılığı (parola başka bir yerde tekrar kullanılırsa ek zarar verebilir).
PHP 5.5.0 ve sonrasında, kullanmak password_hash
ve password_verify
.
Gerekçe: çerçeve tarafından sağlanan bir işlevi çağırmak kolaydır, bu nedenle hata yapma riski azalır. Bu iki işlevle, karma gibi farklı parametreler hakkında düşünmeniz gerekmez. İlk işlev , daha sonra veritabanında depolanabilen tek bir dize döndürür . İkinci işlev bu dizgiyi parola doğrulaması için kullanır.
Kendinizi kaba kuvvetten koruyun . Kullanıcı 0.01 saniye önce başka bir yanlış şifre daha gönderdiğinde yanlış bir şifre girerse, bunu engellemek için iyi bir nedendir. İnsanlar hızlı yazabiliyor olsalar da, muhtemelen o kadar hızlı olamazlar .
Diğer bir koruma, saatlik arıza limiti belirlemek olacaktır. Kullanıcı bir saatte 3600 yanlış şifre, saniyede 1 şifre girerse, bunun meşru bir kullanıcı olduğuna inanmak zordur.
Gerekçe: Şifreleriniz güvensiz bir şekilde şifrelenmişse kaba kuvvet çok etkili olabilir. Parolalar güvenli bir şekilde saklanırsa, kaba güç hala sunucunuzun kaynaklarını ve ağ bant genişliğini boşa harcar ve meşru kullanıcılar için daha düşük performansa neden olur. Kaba kuvvet saptamanın geliştirilmesi ve düzeltilmesi kolay değildir, ancak küçük sistemler dışında, tamamen buna değer.
Kullanıcılarınızdan her dört haftada bir şifrelerini değiştirmelerini istemeyin. Bu son derece can sıkıcı ve güvenliği azaltır çünkü post-it tabanlı güvenliği teşvik ediyor.
Gerekçe: Her değiştirmeye şifreleri zorlayarak fikri n haftalar kaba kuvvet sistemi korur yanlıştır. Kaba kuvvet saldırıları genellikle saniyeler, dakikalar, saatler veya günler içinde başarılı olur; bu da aylık parola değişikliklerini alakasız hale getirir. Öte yandan, kullanıcılar şifreleri hatırlamakta kötüdürler. Dahası, onları değiştirmek zorunda kalırlarsa ya çok basit şifreler kullanmaya çalışırlar ya da şifrelerini post-it üzerine not ederler.
Her zaman her şeyi denetleyin. Girişleri saklayın, ancak şifreleri hiçbir zaman denetim günlüğünde saklamayın. Denetim günlüğünün değiştirilemediğinden emin olun (örneğin, sonunda veri ekleyebilir ancak mevcut verileri değiştiremezsiniz). Denetim günlüklerinin düzenli yedeklemeye tabi olduğundan emin olun. İdeal olarak, günlükler çok kısıtlayıcı erişime sahip özel bir sunucuda depolanmalıdır: eğer başka bir sunucu saldırıya uğrarsa, saldırgan varlığını (ve saldırı sırasında atılan yolu) gizlemek için günlükleri silemez.
Çerezlerde kullanıcı kimlik bilgilerini hatırlamayın, kullanıcı bunu yapmasını istemedikçe (“Beni hatırla” onay kutusunun, insan hatasını önlemek için varsayılan olarak işaretlenmemiş olması gerekir).