Çoğu geliştirici şifrelerin veritabanında düz metin olarak saklanmaması gerektiğini bilir. Ancak bazı developer’lar hala şifrelerin yalnızca md5 yada sha1 gibi algoritmalarla şifrelenerek veritabanında saklanmasının güvenli olduğunu düşünüyor. Önceleri bu algoritmalar, şifreleme için yeterince güçlüydüler. Ancak modern güçlü donanımlar ve bazı büyük veritabanları sayesinde artık yetersiz kalıyor.
Bu gibi durumların önüne geçebilmek için Yii framework’ün 2.0 versiyonu bcrypt adındaki yeni bir algoritmaya geçti. Dolayısıyla hali hazırda veritabanınızda md5 yada sha1 gibi algoritmalarla şifrelenmiş metinler varsa, uygulamaya giriş yapmaya çalıştığınızda “InvalidParamException Hash is invalid” benzeri bir hata alırsınız.
Bu hatayı gidermenin en basit yöntemi şifreleme algoritmasını değiştirerek, hem veritabanındaki şifreleri tekrar hash’lemek, hem de yeni kullanıcıların şifreleri için algoritmayı güncellemek.
Uygulamanızda kullandığınız md5() yada sha1() fonksiyonlarının yerine
Yii::$app->getSecurity()->generatePasswordHash() fonksiyonunu kullandığınızda, problem çözülmüş olacaktır.
Ayrıca login sınıfınızda da doğrulama için aşağıdaki kod bloğunu kullanabilirsiniz:
1 2 3 4 5 |
if (Yii::$app->getSecurity()->validatePassword($formdanGelen, $dbDenGelenHash)) { // doğrulandı / giriş yap } else { // hatalı şifre } |