• 29-09-2017, 14:09:29
    #19
    sesusera adlı üyeden alıntı: mesajı görüntüle
    @theykk;
    Size çok basit bir taktik vereceğim böyle her veriyi tek tek escape etmenize gerek yok kendinizi yormayın , PHP pratik ve esnek bir programlama dilidir.

    Ek olarak ezSQL ( https://github.com/ezSQL/ezSQL ) kullanabilirsiniz
    // Sistemin başlangıçına konulması gerekir
    // bunun yukarısında her hangi bir $_GET veya $_POST superglobali kullanılmaması gerekmekte.
    function clean($data = array())
    {
        if( is_array($data) )
        {
            $data = array_map('clean' , $data);
        }
        else
        {
            $data = htmlspecialchars( $data );
            $data = urldecode( $data );
            // sunucuda magic quotes gpc aktif ise slash eklemez değilse ekler.
            $data = get_magic_quotes_gpc() ? $data : addslashes( $data );
        }
        return $data;
    }
    
    
    // Dışarıdan gelen tüm GET / POST methodlarını filtrelemiş olduk.
    // bu şekilde XSS ve SQL INJECTION önlemini aldık.
    $_GET  = clean( $_GET );
    $_POST = clean( $_POST );
    
    // Örnek Sorgu
    mysql_query("INSERT INTO table SET column = '{$_GET['value']}'");
    
    // Değişken için kullanımı
    $zararliveri = "Merhaba ' ";
    mysql_query("INSERT INTO table SET column = '".clean($zararliveri)."' ");
    HTML kullanmak istediğinizde ise html kodlarını çalıştırmak için ;
    function decode_html( $html )
    {
            // zararlı kodlar strip_tags ile filtrelenebilir.
        return htmlspecialchars_decode( $html );
    }
    clean() fonksiyonu tam olarak güvenli sayılmaz..sen istediğin get ,post, session geçir bu fonksiyondan bunun haricinde herhangi bir şey yapma yine de geçilir.
  • 29-09-2017, 16:34:23
    #20
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    clean() fonksiyonu tam olarak güvenli sayılmaz..sen istediğin get ,post, session geçir bu fonksiyondan bunun haricinde herhangi bir şey yapma yine de geçilir.

    Merhabalar maalesef geçilir demek ile olmuyor örneklendirip aksini ispatlamanız gerekiyor ilgili fonksiyonu kullanıp geçip alıntılar mısınız rica etsem merak ediyorum nasıl geçeceğinizi bende hatam var ise öğrenmiş olurum
  • 29-09-2017, 16:40:31
    #21
    sesusera adlı üyeden alıntı: mesajı görüntüle
    Merhabalar maalesef geçilir demek ile olmuyor örneklendirip aksini ispatlamanız gerekiyor ilgili fonksiyonu kullanıp geçip alıntılar mısınız rica etsem merak ediyorum nasıl geçeceğinizi bende hatam var ise öğrenmiş olurum
    pm den skype attım gelın skypeye nasıl geçtiğimi göstereyım size...
  • 29-09-2017, 16:43:58
    #22
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    pm den skype attım gelın skypeye nasıl geçtiğimi göstereyım size...
    Yok hayır buradan yazın herkes öğrensin
  • 29-09-2017, 16:48:45
    #23
    sesusera adlı üyeden alıntı: mesajı görüntüle
    Yok hayır buradan yazın herkes öğrensin
    al bakalım güzel kardeşim query ile bi sorgu yaptım.
    sec.php
    <?php  
    require_once("db.php");
    function clean($data = array()) 
    { 
        if( is_array($data) ) 
        { 
            $data = array_map('clean' , $data); 
        } 
        else 
        { 
            $data = htmlspecialchars( $data ); 
            $data = urldecode( $data ); 
            // sunucuda magic quotes gpc aktif ise slash eklemez değilse ekler. 
            $data = get_magic_quotes_gpc() ? $data : addslashes( $data ); 
        } 
        return $data; 
    } 
    $id = clean($_GET["id"]);  
    $la = $db->query("SELECT * FROM duyurular where id=$id");  
    
    //$la->execute(array($id)); 
    $get = $la->fetchAll();
        foreach($get as $v) {
            //echo $v['id'];
            echo $v['baslik'];
        }
    pdo bağlantısını sen halledersin sanırım sql tablom da ;
    id ,baslik,icerik şeklinde 3 kolonlu.

    sec.php?id=1+union+select+1,version(),3 dal bakalım şu şekilde komple alırsın db yi...hadi bunu engelledın.
    sec.php?id=1+and+1=0 da aldığın sonuca bak
    sec.php?id=1+and+1=1 de aldığın sonuca bak.
  • 29-09-2017, 16:52:08
    #24
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    al bakalım güzel kardeşim query ile bi sorgu yaptım.
    sec.php
    <?php  
    require_once("db.php");
    function clean($data = array()) 
    { 
        if( is_array($data) ) 
        { 
            $data = array_map('clean' , $data); 
        } 
        else 
        { 
            $data = htmlspecialchars( $data ); 
            $data = urldecode( $data ); 
            // sunucuda magic quotes gpc aktif ise slash eklemez değilse ekler. 
            $data = get_magic_quotes_gpc() ? $data : addslashes( $data ); 
        } 
        return $data; 
    } 
    $id = clean($_GET["id"]);  
    $la = $db->query("SELECT * FROM duyurular where id=$id");  
    
    //$la->execute(array($id)); 
    $get = $la->fetchAll();
        foreach($get as $v) {
            //echo $v['id'];
            echo $v['baslik'];
        }
    pdo bağlantısını sen halledersin sanırım sql tablom da ;
    id ,baslik,icerik şeklinde 3 kolonlu.

    sec.php?id=1+union+select+1,version(),3 dal bakalım şu şekilde komple alırsın db yi...hadi bunu engelledın.
    sec.php?id=1+and+1=0 da aldığın sonuca bak
    sec.php?id=1+and+1=1 de aldığın sonuca bak.

    Merhabalar id = 1 veya name = test diye bir kullanım doğru değildir bunu bildiğiniz varsayıyorum '' içerisinde belirtirseniz hiç bir açık oluşturmaz işinize geldiğiniz gibi yorumlamışsınız verdiğim örnek ' ' içerisinde dikkat ettiyseniz , sanırım etmemişsiniz

    Sizin yapmış olduğunuz tam olarak şu dışarıdan sql sorgusu yazılabilir halde alıyorsunuz bu tamamen yanlış ve amatörce bir kullanış verdiğim örnekler halinde kullanılır ise hiç bir şekilde aşılamaz.
  • 29-09-2017, 16:58:00
    #25
    sesusera adlı üyeden alıntı: mesajı görüntüle
    Merhabalar id = 1 veya name = test diye bir kullanım doğru değildir bunu bildiğiniz varsayıyorum '' içerisinde belirtirseniz hiç bir açık oluşturmaz işinize geldiğiniz gibi yorumlamışsınız verdiğim örnek ' ' içerisinde dikkat ettiyseniz , sanırım etmemişsiniz

    Sizin yapmış olduğunuz tam olarak şu dışarıdan sql sorgusu yazılabilir halde alıyorsunuz bu tamamen yanlış ve amatörce bir kullanış verdiğim örnekler halinde kullanılır ise hiç bir şekilde aşılamaz.
    dikkat etmemekle ilgisi alakası yok ,eğer '$id' şekliden kullanacak olsam senın fonksiyonuna ne gerek var ki? sql açıkları için kullanmama gerek bile yok.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:58:00 -->-> Daha önceki mesaj 16:56:47 --

    sesusera adlı üyeden alıntı: mesajı görüntüle
    Merhabalar id = 1 veya name = test diye bir kullanım doğru değildir bunu bildiğiniz varsayıyorum '' içerisinde belirtirseniz hiç bir açık oluşturmaz işinize geldiğiniz gibi yorumlamışsınız verdiğim örnek ' ' içerisinde dikkat ettiyseniz , sanırım etmemişsiniz

    Sizin yapmış olduğunuz tam olarak şu dışarıdan sql sorgusu yazılabilir halde alıyorsunuz bu tamamen yanlış ve amatörce bir kullanış verdiğim örnekler halinde kullanılır ise hiç bir şekilde aşılamaz.
    programlama eğitimini temel olarak alan kişiler integer verilerinde tırnak kullanmayacağını bilir.kullanılabilir de..
    $x = 0;
    şeklinde kullanılır çoğunlukla integer veriler.(son düzenlemenize istinaden bu)
  • 29-09-2017, 17:11:03
    #26
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    dikkat etmemekle ilgisi alakası yok ,eğer '$id' şekliden kullanacak olsam senın fonksiyonuna ne gerek var ki? sql açıkları için kullanmama gerek bile yok.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:58:00 -->-> Daha önceki mesaj 16:56:47 --



    programlama eğitimini temel olarak alan kişisel integer verilerinde tırnak kullanmayacağını bilir.kullanılabilir de..
    $x = 0;
    şeklinde kullanılır çoğunlukla integer veriler.(son düzenlemenize istinaden bu)
    İnteger verilerde tırnak kullanmayacağını biliyorsunuz ancak değişken türü atamayı deneyebilirsiniz.
    $id = abs(intval( $_GET['id'] ));
    $id = abs((int) $_GET['id']);
    // Verdiğim fonksiyonu burada kullanmanıza bile gerek kalmıyor.

    Vermiş olduğum örnekten gitmediğiniz için hiç bir şekilde size katılmıyor ve hala benim kullandığım şekilde aşılamayacağını savunuyorum aksini ispatlarsanız sevinirim benim örneklerimden

    Ek olarak php'de bu şekilde dışarıdan gelen bir herhangi bir değer açık oluşturur sql sorgusunda yazdırılmaz. eğer kullanılacak ise de değişken tipi integer olarak belirtilmelidir aksi takdirde oradan join atıp başka tabloyada bağlanılabilir

    Benim verdiğim örnekte tırnak içerisinde kullanmama rağmen direk sql sorgusu yazdırılabilir halde alıp alın açık var diyorsunuz komik bir yaklaşım.
    Siz şöyle yapın isterseniz daha doğru bir örnek olur
    $_GET['sql'] = 'SELECT * FROM users';
    mysql_query(clean($_GET['sql']));

    Lütfen hala iddialaşma gayretleri içerisinde iseniz vermiş olduğum örnek üzerinden gidin.
  • 29-09-2017, 17:18:33
    #27
    sesusera adlı üyeden alıntı: mesajı görüntüle
    İnteger verilerde tırnak kullanmayacağını biliyorsunuz ancak değişken türü atamayı deneyebilirsiniz.
    $id = abs(intval( $_GET['id'] ));
    $id = abs((int) $_GET['id']);
    // Verdiğim fonksiyonu burada kullanmanıza bile gerek kalmıyor.

    Vermiş olduğum örnekten gitmediğiniz için hiç bir şekilde size katılmıyor ve hala benim kullandığım şekilde aşılamayacağını savunuyorum aksini ispatlarsanız sevinirim benim örneklerimden

    Ek olarak php'de bu şekilde dışarıdan gelen bir her hangi değer açık oluşturur sql sorgusunda yazdırılmaz. eğer kullanılacak ise de değişken tipi integer olarak belirtilmelidir aksi takdirde oradan join atıp başka tabloyada bağlanılabilir

    Benim verdiğim örnekte tırnak içerisinde kullanmama rağmen direk sql sorgusu yazdırılabilir halde alıp alın açık var diyorsunuz komik bir yaklaşım.
    Siz şöyle yapın isterseniz daha doğru bir örnek olur
    $_GET['sql'] = 'SELECT * FROM users';
    mysql_query(clean($_GET['sql']));

    Lütfen hala iddialaşma gayretleri içerisinde iseniz vermiş olduğum örnek üzerinden gidin.
    Olayda büyük bir yanlış anlaşılma olmuş sanırım yanlış anlamışım ben sql injection problemini kökten çözer şeklinde anladım.Yanlışım varsa affola..