#1 PHP & MySQL Veritabanı Şifrelerini Şifrelemek

Râiw Kâli

Yeni Ucube
14 Haz 2018
42
1
0
25
PHP & MySQL Veritabanı Şifrelerini Şifrelemek


Merhaba ucubeler! Sizinde bildiğiniz üzere veriler ister bir veritabanında ister bir dosyada depolanabilir. Şifreleri düz metin olarak depolamak çok gereksiz bir risk almak olacaktır. Tek yönlü hashing algoritması biraz daha fazla güvenlik sağlamanıza yardımcı olacaktır.

---

PHP, birtakım tek yönlü hash fonksiyonları sağlar. Bunların en eskisi ve en az güvenli olanı "crypt()" fonksiyonunun sağladığı Unix Crypt alogirtmasıdır. md5() fonksiyonunun içinde yer alan MD5 (Message Digest5) alogirtması daha güçlüdür ve PHP sürümlerinin çoğunda mevcuttur. Eski PHP sürümleriyle uyumluluk sizin için önemli değil ise, SHA-1 (Secure Hash Algoritm 1) kullanmanız yeterli olacaktır.

---

PHP fonksiyonu "sha1()", güçlü, tek yönlü bir kriptografik hash fonksiyonu sağlar. Bu fonksiyonun prototipi aşağıdaki gibidir;


PHP:
string sha1 ( string str [ , bool raw_output] )

"str" karakter katarı ile fonksiyon, 40 karakterlik bir sözde rastgele katar döndürecektir. "raw_output" true olarak ayarlanırsa, ikililik verilerden oluşan 20 karakterlik bir katar elde edilir. Örneğin "password" karakter katarı ile, "sha1()" fonksiyonu "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" değerini döndürür. Bu karakter katarı oluşturucusu tarafından bile çözülerek "password" haline getirilemez. Bu yüzden de ilk bakışta kullanışsız gibi görünebilir. "sha1()" fonksiyonunu kullanışlı yapan durum, çıktının deterministik olmasıdır. Aynı katar verildiğinde "sha1()" fonksyionunun çalıştığı her durumda aynı sonuç elde edilir. Bu yüzden kullanıcı adı ve şifre gereken her forum tasarımında aşağıdaki kodu kullanmak yerine;


PHP:
if ( $name == 'username' && $password == 'password' )
{
print "Şifreler birbiri ile uyumludur.";
}

şöyle bir kod yazarsak güvenlik seviyemizi daha üst seviyede tutabiliriz;


PHP:
if ( $name == 'username' && sha1($password) == '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' )
{
print "Şifreler birbiri ile uyumludur.";
}

"sha1()" kullanmadan önce şifrenin neye benzediğini bilmeniz gerekmez. Bilmeniz gereken tek şey, yazılan şifrenin "sha1()" fonksiyonu çalıştırıldığında ortaya çıkan sonuç ile aynı olmasıdır.

---

Bunların yanı sıra kabul edilebilir kullanıcı adı ve şifreleri bir script içine kodlamak kötü bir fikirdir. Bunları depolamak için ayrı bir veritabanı kullanmanız sizin için daha sağlıklı olacaktır.

---
Kimlik denetimi verilerinizi depolamak için bir MySQL veritabanı kullanıyorsanız, PHP fonksiyonu olan "sha1()" veya MySQL fonksiyonu "SHA1()" kullanabilirsiniz. MySQL'in hashing algoritmaları konusunda sunduğu seçenekler PHP'ye göre çok daha fazladır, ama bunların hepsi aynı amaca hizmet eder.

---

MySQL fonksiyonu olan "SHA1()" kullanımını görmek için yukarıdaki kodun SQL sorgusunu şu şekilde döndirebiliriz;


PHP:
select count(*) from authorized_used where name = $username and password = sha1('$password)

Bu sorgu "authorized_users isimli tabloda "$name" değişkeninin içeriğine eşit bir name değeri olan ve "$password" değişkeninin içine "SHA1()" uygulandığında verilerin çıktıya eşit bir password değeri olan satırları sayacaktır. Kullanıcıların benzersiz kullanıcı adları almalarını sağladığınızı varsayarsak bu sorgunun sonucu ya 0 ya da 1 oalcaktır. 0 olma durumu ya kullanıcı adı hiç alınmamıştır, 1 olma durumu bu kullanıcı adı bir kullanıcı tarafından kullanılmaktadır.

---

Hash fonksiyonlarının genellikle sabit büyüklükteti veriler döndürdüğünü unutmayın. "SHA1()" fonksiyonunun da bu büyüklük, bir karakter katarı olarak gösterildiğinde 40 karakterdir. Veritabanı sütununuzun genişlikte olduğundan emin olun.

-----

Zaman ayırıp okuyan tüm ucubelere teşekkürü borç bilir konudan yararlanan ve daha fazla kitleye ulaşmamızı isteyen arkadaşlardan da ufak bir ricam olacak, lütfen konuyu güncel tutarak bu konu ve seriden yararlanmak isteyen diğer arkadaşlara da öncü ve yardımcı olunuz, esen kalın ucubeler!
 

Nameless

Admin
Yönetici
Admin
7 Haz 2018
528
884
0
ucubeler.net
Cvp: #1 PHP & MySQL Veritabanı Şifrelerini Şifrelemek

Çok sağol hocam. Ellerine sağlık. YARARLANAN KİŞİLER YORUM YAPARAK KONUYU GÜNCEL TUTSUN LÜTFEN...
 

Râiw Kâli

Yeni Ucube
14 Haz 2018
42
1
0
25
Cvp: #1 PHP & MySQL Veritabanı Şifrelerini Şifrelemek

Nameless' Alıntı:
Çok sağol hocam. Ellerine sağlık. YARARLANAN KİŞİLER YORUM YAPARAK KONUYU GÜNCEL TUTSUN LÜTFEN...
Güzel yorumunız için teşekkürler hocam, güncel++
 

Râiw Kâli

Yeni Ucube
14 Haz 2018
42
1
0
25
Cvp: #1 PHP & MySQL Veritabanı Şifrelerini Şifrelemek

ET TA MERE' Alıntı:
çok teşekkürler ++ (bu arada eski profiliniz baş döndürüyordu, değiştirmeseydiniz keşke)
Güzel yorumun için teşekkür ederim, kısa bir süreliğine değiştirdim tekrar eski haline getireceğim
 

Yasal Uyarı

  • 5651 Sayılı Kanun'un 8. Maddesine ve T.C.K'nin 125. Maddesine göre tüm üyelerimiz, yaptıkları paylaşımlardan sorumludur. Ucubeler.Net hakkında yapılacak tüm hukuksal şikayetler, ''İletişim'' linkimizden bize ulaşıldıktan en geç 3 (üç) gün içerisinde ilgili kanunlar ve yönetmenlikler çerçevesinde tarafımızca incelenerek şikayetler hakkında gereken işlemler yapılacak ve site yöneticilerimiz tarafından şikayet sahibi şahıslara bilgi verilecektir.

Hızlı Navigasyon

Kullanıcı Menüsü