Php base64_encode ve base64_decode kullanımı sorunu
Merhabalar. Benim şöyle bir sorunum var. Siteye kullanıcı kaydı yaparken base64_encode ile kayıt yapabiliyorum. Kaydı çekeceğimde ise veritabanındaki şifreli kodu şifre alanına girsem dahi giriş yapamıyorum. Hata da vermiyor. Giriş alanının kodlarını kısaca koyuyorum. Bu arada "$_POST" alanlarına "strip_tags" ve "trim" gibi şeyler koymadığımda da olmuyor. Yani aşağıdaki gibi kullandığımda da olmuyor. Ne yapmam lazım acaba?
<?php
$ad = $_POST['ad'];
$parola = base64_decode($_POST['sifre']);
$query = "SELECT * FROM kullanici WHERE kullanici_ad = '$ad' AND kullanici_sifre = '$parola'";
$mysqli = mysqli_query($db, $query);
$sonuc = mysqli_fetch_array($mysqli);
if(($sonuc['kullanici_ad'] == $ad) AND ($sonuc['kullanici_sifre'] == $parola)) {
" BURADA GİRİŞ YAPIYOR "
?>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
kullanıcı tablonda kullanıcı_sifre alanındaki şifreyi encode ile kaydedip $query ile veri çekerken neden decode olarak eşleştiriyorsun ki?
Kısaca şifreli alanı şifresi çözülmüş parola ile eşleştirirsen veri çekmez.
$parolayı decode değil encode yapıp dener misin?
Aslında burada eğer güzel bir iş çıkartmak istiyorsan şunu göz önünde bulundurman lazım, veriyi b64 encode edip tutman ile cleartext tutman arasında hiç bir fark olmuyor.
Onun yerine bir hash algoritmasından geçirip o şekilde tutman senin faydana olacaktır. Bunun için md5, sha256 yada blowfish algoritmalarına bakabilirsin.
sen burda
$parola = base64_decode($_POST['sifre']);
ile kulanıcın forma yazdığı parolanın şifresini çözüyorsun. kullanıcı parolasını şifrelenmiş yazmadı ki!
kullanıcı parolasını yazar sen bunu şifreli olarak okur, tablondaki şifreli parola ile eşleştirirsin.
yada tablondan $_post["kullanıcı_adi] ile eşleşen veriyi çeker ve çektiğin kullanıcı parolasını çözersin
if(base64_decode($sonuc["kullanıcı_parola]) == $_post["sifre"] ) { //giriş izni verirsin}else{//hatakodu gösterirsin}
Veritabanına şifreli olarak kaydedilmiş veriyi, veritabanından çekerken şifresi çözülmüş olarak çekmek gerekmiyor mu? Mantığını tam anlayamadım galiba?