• 02-02-2014, 18:10:34
    #1
    Güvenlik korkularım devam ediyor Hiçbir kontrol yapmadan direk olarak veritabanına <' 'é karakterlerini ekledim. Üstteki ekleme normal mysql_query ile eklendi alttaki ise PDO ile. Bunların hangisi sql injection oluşturuyor ve mantığını bana anlatabilecek var mı ?




    ek olarak : güvenlik kontrolü yapanlar ne türk fonksiyonlar kullanıyorlar ? ben post ve get diye iki adet fonksiyon oluşturdum ve her yerde onu kullanıyorum ama söylenenlere göre PDO da ne kadar ihtiyacım var bilemiyorum.
  • 02-02-2014, 18:13:34
    #2
    eklendikden sonra değil klenirken güvenlik oluşturuyor yani o fonksiynu çalışltırırken.
  • 02-02-2014, 18:16:15
    #3
    CodeS adlı üyeden alıntı: mesajı görüntüle
    eklendikden sonra değil klenirken güvenlik oluşturuyor yani o fonksiynu çalışltırırken.
    tam olarak mantığını kavrayamıyorum işte o işlemin detaylı anlatabilir misiniz ?
  • 02-02-2014, 18:20:04
    #4
    Misafir adlı üyeden alıntı: mesajı görüntüle
    tam olarak mantığını kavrayamıyorum işte o işlemin detaylı anlatabilir misiniz ?
    codesin dediğini en basit şekilde örnek bir mysql_* sorgusundan anlatayım.

    mysql_query("update abc set isim='$isim', soyad='$soyad' burdan sonrası hayal gücüne kalmış' ");

    kırmızıyla işaretlediğim ' ile sorguyu kesiyor ve sonrasında canı istediği gibi devam edip istediğini sqle uyguluyor. o yüzden mutlaka güvenlik fonksiyonları kullanmak gerekiyor.
  • 02-02-2014, 18:25:38
    #5
    PsdBul adlı üyeden alıntı: mesajı görüntüle
    codesin dediğini en basit şekilde örnek bir mysql_* sorgusundan anlatayım.

    mysql_query("update abc set isim='$isim', soyad='$soyad' burdan sonrası hayal gücüne kalmış' ");

    kırmızıyla işaretlediğim ' ile sorguyu kesiyor ve sonrasında canı istediği gibi devam edip istediğini sqle uyguluyor. o yüzden mutlaka güvenlik fonksiyonları kullanmak gerekiyor.

    peki sizin kullandığınız fonksiyonlar neler sakıncası yoksa paylaşabilir misiniz ? ben şöyle fonksiyonlar yazdım ;

    function post($a){
    		
    		return addslashes(htmlspecialchars(htmlentities(trim($_POST[$a]))));
    		
    	
    	}
    	
    	function get($a){
    		
    		return addslashes(htmlspecialchars(htmlentities(trim($_GET[$a]))));
    		
    	
    	}
  • 02-02-2014, 18:25:40
    #6
    sql açığının mantığını bilmeniziz için phpde tek ve çift tırnak kullanımı ve syntax hatalarını kavramak gerek
    php kodları yorumlarken tırnaklaragörede yorumlar ve text bir sorguyu önce oluşturdukdan sonra mysql sunucuya gönderir.
    mysql da aynı şekilde yorumlarken texti belirli kriterlere göre yorumlar.

    örneğin
    x='$veri' deriz
    $veri = " ' ";
    dersek sorgu şu şekilde olacak
    x=' ' '
    yukarıda bakarsanız 3 tırnak ardarda bulunmasını mysql şu şekilde yorumlayacak
    x='' iki tınak normal iken 3. tırnak yorumlanırken hata olacak


    yani işin özü mysql ve php gibi bütün dillere text olarak veri girilir fakat her dil o text verileri yorumlayarak işlemler yürütür.
  • 02-02-2014, 18:26:46
    #7
    Misafir adlı üyeden alıntı: mesajı görüntüle
    peki sizin kullandığınız fonksiyonlar neler sakıncası yoksa paylaşabilir misiniz ? ben şöyle fonksiyonlar yazdım ;

    function post($a){
    		
    		return addslashes(htmlspecialchars(htmlentities(trim($_POST[$a]))));
    		
    	
    	}
    	
    	function get($a){
    		
    		return addslashes(htmlspecialchars(htmlentities(trim($_GET[$a]))));
    		
    	
    	}
    en basitinden mysql_real_escape_string te aynı görevi görmektedir. Eğer büyük projelerde çalışıyorsanız bu güvenlik önlemleri veri tipine göre vs.. çok daha farklı boyutlar alabilir.
  • 02-02-2014, 18:28:29
    #8
    CodeS adlı üyeden alıntı: mesajı görüntüle
    sql açığının mantığını bilmeniziz için phpde tek ve çift tırnak kullanımı ve syntax hatalarını kavramak gerek
    php kodları yorumlarken tırnaklaragörede yorumlar ve text bir sorguyu önce oluşturdukdan sonra mysql sunucuya gönderir.
    mysql da aynı şekilde yorumlarken texti belirli kriterlere göre yorumlar.

    örneğin
    x='$veri' deriz
    $veri = " ' ";
    dersek sorgu şu şekilde olacak
    x=' ' '
    yukarıda bakarsanız 3 tırnak ardarda bulunmasını mysql şu şekilde yorumlayacak
    x='' iki tınak normal iken 3. tırnak yorumlanırken hata olacak


    yani işin özü mysql ve php gibi bütün dillere text olarak veri girilir fakat her dil o text verileri yorumlayarak işlemler yürütür.
    şimdi çok iyi anladım. eyvAllah hocam

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 18:28:29 -->-> Daha önceki mesaj 18:27:34 --

    PsdBul adlı üyeden alıntı: mesajı görüntüle
    en basitinden mysql_real_escape_string te aynı görevi görmektedir. Eğer büyük projelerde çalışıyorsanız bu güvenlik önlemleri veri tipine göre vs.. çok daha farklı boyutlar alabilir.
    mysql_real_escape_string mysql_li kalkarsa kalkmayacak mı ? ondan onu kullanmak istemedim.
  • 02-02-2014, 18:29:59
    #9
    Misafir adlı üyeden alıntı: mesajı görüntüle
    şimdi çok iyi anladım. eyvAllah hocam

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 18:28:29 -->-> Daha önceki mesaj 18:27:34 --



    mysql_real_escape_string mysql_li kalkarsa kalkmayacak mı ? ondan onu kullanmak istemedim.
    neler kalkar neler kalkmaz kesin bir bilgim yok çok detaylı araştırmadım ancak genellikle önerilen pdo. kendi içerisindede benzer sorguları çok rahat şekilde kontrol ediyor ayrıca 15 civarı sql tipiyle çalışabiliyor.