v2.5.2
Giriş yap

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

utku5420
740 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.";
}

}

arco
1475 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