v2.5.2
Giriş yap

Kodum'da SQL injection açığı bulunuyor mu?

utku5420
792 defa görüntülendi

Merhaba PHP ile yeni yeni uğraşıyorum. Login sistemi için ufak bir kod yazdım. Kodum da SQL injection için açık bulunuyor mu? Ve kodumu nasıl daha geliştirebilirim?
Şimdiden teşekkürler!

if (isset($_POST["loginAttempt"])) {

$username = htmlentities($_POST["username"]);
$password = htmlentities($_POST["password"]);
if (!empty($username) &&
    !empty($password)) {
    require "_requires/conn.php";
    $run = $conn->prepare("SELECT user_id,username,password FROM users WHERE username = ? AND status = '1'");
    $conn = null;
    $run->bindParam(1, $username, PDO::PARAM_STR);
    $run->execute();
    $user = $run->fetch();
    if ($run->rowCount()) {
        if (password_verify($password, $user["password"])) {
            $_SESSION["AUTH"] = [
                "ID" => $user["user_id"],
                "IP" => $_SERVER["REMOTE_ADDR"],
                "BIRTH" => time(),
            ];
            $_SESSION["LAST_ACTIVITY"] = time();
            header("Location: /panel/");
            exit();
        } else {
            $error_msg = "Giriş Başarısız.";
        }
    }
} else {
    $error_msg = "Giriş Başarısız.";
}

}

Cevap yaz
Cevaplar (6)
aydinkeskin
1679 gün önce

BEN ŞAHSEN şifre alanında md5(sha1 kullanıyorum
bindValue ile birçok şeyden kafan daha rahat olur.

arco
1679 gün önce

hocam md5 ile şifrelersin diye düşündüm şifreyi saf kayıt ediyorsun sandım

utku5420
1679 gün önce

Hocam şifre db de PASSWORD_BCRYPT hashi ile kayıtlı. MD5i ne için kullanmalıyım anlamadım tam olarak. Ve cevaplar için de teşekkürler.

arco
1680 gün önce

hocam bu arada rowCount yerine şunu kullanırsan daha çok performans elde edersin (tecrübeye sabit)=
<?php
$uyebak=$db->prepare("SELECT COUNT(id) FROM uyeler WHERE username=:username AND password=:password");
$uyebak->bindValue(':username', $usernamedeğişkenin, PDO::PARAM_STR);
$uyebak->bindValue(':password', $pasworddeğişkenin, PDO::PARAM_STR);
$uyebak->execute();
$uyesay=$uyebak->fetchColumn();
if($uyesay<=0){

echo "kullanıcı adı şifre uyuşmuyor";

} else {

echo "Giriş başarılı";

}
?>
Ayrıca şifreyi MD5'e çevirip db'ye yazsan daha iyi
yani=
<?php
$password = MD5(htmlentities($_POST["password"]));
?>
unutma giriş işleminde de md5'i kullan

arco
1680 gün önce

Ayrıca Şöyle de yapabilirsin bilgin olsun =
$run = $conn->prepare("SELECT user_id,username,password FROM users WHERE username = :username AND status = '1'");

$conn = null;
$run->bindValue(':username', $username, PDO::PARAM_STR);
$run->execute();
bindValue işlemi de güvenlidir
arco
1680 gün önce

$run->bindParam(1, $username, PDO::PARAM_STR);
sayesinde bulunmuyor hocam :) Gayet güvenli için rahat olsun