• 25-01-2023, 11:17:05
    #1
    Merhaba. Bir sorgum var, bu sorgum sql injection'a "query" methodu ile yatkın sanırım.
    Bu işlemi prepare ile yapmak istesem nasıl yapabilirim?
    if (isset($_POST['search'])) {
     
        $name = htmlspecialchars(($_POST['search']));
     
        $query = $db->query("SELECT * FROM posts WHERE title LIKE '%$name%'", PDO::FETCH_ASSOC)->fetchAll();
    }
  • 25-01-2023, 11:20:22
    #2
    if (isset($_POST['search'])) {
      
        $name = htmlspecialchars(($_POST['search']));
    
        $name = "%".$name."%";
      
        $query = $db->prepare("SELECT * FROM posts WHERE title LIKE :name");
        $query->bindParam(":name", $name, PDO::PARAM_STR);
        $query->fetchAll(PDO::FETCH_ASSOC);
        $query->execute();
    }
  • 25-01-2023, 11:22:45
    #3
    Merhabalar, burada güzel bir kaynak var inceleyebilirsiniz .
  • 25-01-2023, 12:05:54
    #4
    v4r1able adlı üyeden alıntı: mesajı görüntüle
    if (isset($_POST['search'])) {
      
        $name = htmlspecialchars(($_POST['search']));
    
        $name = "%".$name."%";
      
        $query = $db->prepare("SELECT * FROM posts WHERE title LIKE :name");
        $query->bindParam(":name", $name, PDO::PARAM_STR);
        $query->fetchAll(PDO::FETCH_ASSOC);
        $query->execute();
    }
    Merhaba. burada yaptığın işlemin mantığını anlatabilir misin?
  • 25-01-2023, 12:27:32
    #5
    iltu33 adlı üyeden alıntı: mesajı görüntüle
    Merhaba. burada yaptığın işlemin mantığını anlatabilir misin?
    Hocam prepare sorgusu yapıp :name bind'ını ekledim ardından bindParam ile :name bind'a $name verisini yerleştirdim ve STR yani string ifadesi ile filtreledim
  • 25-01-2023, 12:51:36
    #6
    v4r1able adlı üyeden alıntı: mesajı görüntüle
    Hocam prepare sorgusu yapıp :name bind'ını ekledim ardından bindParam ile :name bind'a $name verisini yerleştirdim ve STR yani string ifadesi ile filtreledim
    Teşekkür ederim, sağolun.
  • 28-01-2023, 10:01:56
    #7
    Evet, gönderilen verileri "query" methodu ile direk sorguya dahil etmek SQL injection'a yatkın hale getirir. Bu nedenle, "prepare" methodunu kullanarak sorguyu çalıştırmak daha güvenlidir. Örnek olarak, aşağıdaki gibi düzenleyebilirsiniz:

    if (isset($_POST['search'])) {
    $name = htmlspecialchars(($_POST['search']));
    $query = $db->prepare("SELECT * FROM posts WHERE title LIKE :name");
    $query->execute(array(':name' => "%$name%"));
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
    }

    Bu şekilde, gönderilen veriler "prepare" metodu ile hazırlanmış bir sorguya dahil edilir ve SQL injection'a karşı daha korunaklı hale gelir.