Bcrypt ile giriş yapma
Bcrypt ile giriş yapma!
Herkese merhabalar saygı değer hocalarım
,
Ben bir siteye e-ticaret ile alakalı bir panel kurdum fakat temalarını ve gerekli özelliklerini beğenmediğim için kendim yazmaya karar verdim.
bu e ticaret sistesinde bir kullanıcı ekleyince alltaki gbi şifreliyor, bende kendi panelimde bu panelin şifrelemesine göre giriş yaptırmam gerekiyor ne yaparsam yapayım çözemedim yardımcı olurmusunuz acaba ?
Saatlerdir denedim ama bi türlü yapamadım, yardımcı olursanız sevinirim.
Not : daha acemiyim, ona göre yardımcı olursanız sevinirim.
<?php
session_start();
include 'db.php';
if (isset($_POST['girisyap'])) {
$email=htmlspecialchars($_POST['email']);
$password=htmlspecialchars($_POST['password']);
$passwordguclu=password_hash("sha256", $password, PASSWORD_DEFAULT);
$tblclientssor=$baglanti->prepare("SELECT * from tblclients where email=:email and password=:password");
$tblclientssor->execute(array(
'email'=>$email,
'password'=>$passwordguclu
));
$var=$tblclientssor->rowCount();
if ($var >0) {
$_SESSION['girisbelgesi']=$email;
Header("Location: index.php?durum=welcome");
}
else {
Header ("Location: login.php?durum=hata");
}
}
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
Öncelikle password_hash fonksiyonunu hatali kullaniyorsunuz. Asagidaki örnek'de iki farkli alogritma yazdim. Oradan parametrelere bakabilirsiniz.
$password = '123456';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// veya burada daha güclü Argon2 sifrelemeyi kullanabilirsiniz. PASSWORD_ARGON2ID, PHP 7.4 ve üzeri sürümlerde calisir.
$hashedPassword = password_hash($password, PASSWORD_ARGON2ID, [
'memory_cost' => 2048,
'time_cost' => 4,
'threads' => 3,
]);
// Veri tabanindan üyeyi cekmek icin sadece kullanici adi'ni kullanin
if(password_verify($password, $hashedPassword))
{
echo 'gecerli sifre';
} else {
echo 'gecersiz sifre';
}
Sizin kodunuza entegre edecek olursak su sekilde deneyebilirsiniz
session_start();
include 'db.php';
if (isset($_POST['girisyap'])) {
$email = htmlspecialchars($_POST['email']);
$password = htmlspecialchars($_POST['password']);
// bu kodu kayit esnasinda sifreyi kayit ederken kullanacaksiniz.
//$passwordguclu = password_hash($password, PASSWORD_DEFAULT);
$tblclientssor = $baglanti->prepare("SELECT * from tblclients where email=:email");
$tblclientssor->execute(array(
'email' => $email,
));
$user = $tblclientssor->fetch(PDO::FETCH_ASSOC);
if ($tblclientssor->rowCount() && password_verify($password, $user['password'])) {
$_SESSION['girisbelgesi']=$email;
Header("Location: index.php?durum=welcome");
} else {
Header ("Location: login.php?durum=hata");
}
}
password_hash sürekli random salt kullandığı için veritabanından farkı bir değer üretecektir. Kullanıcı adı ve parola ile kullanıcıyı çekemezsin. O yüzden giriş yaparken sadece username ile veri çekmelisin.
Daha sonra password_verify ile postalanan şifre ile database'ten gelen hash'i doğrulatmalısın.
öncelıkle
bu kodlamada mısal 12345 şifresı verı tabanında 465a4da56s4da654d6a5s4da6sd4a6sd4a6s45d gibi saklanır
senın sıfrelemende 12345 şifresi misal 6+5445644465 tarzında verı tabanında tutuluyordur ( tabı sıfrelıyorsan )
ondan oturu uyusmadıgından gırıs yapamazsın
yapacagın sey şu senın varolan sıfrelemenı ve sıfrenı sıleceksın
$password="12345";
echo $passwordguclu=password_hash("sha256", $password, PASSWORD_DEFAULT);
burada cıkan sonucu verı tabanına yazacaksın sonra gırıs yapmayı deneyeceksin ki sunucu unutma
buda senın panelınde olmalı $passwordguclu=password_hash("sha256", $password, PASSWORD_DEFAULT);