• 28-09-2017, 18:10:18
    #10
    MorNetAjans adlı üyeden alıntı: mesajı görüntüle
    PDO nun hacklenmeyeceğini kim çıkarttı acaba ? Salt veya Framework veya PDO yapısı ile kodlanmış bir site get post gibi parametreleri kontrol etmeden işlem yaptırırsa gayet sql injection yiyebilirsiniz.
    Direk query ile basarsanız yersiniz tabii, fakat prepare kullanırsanız bu olay zorlaşır.Prepare ile direkt indirilmez veritabanı olsa bile kullanıma göre açık olabilir.Ben xss ve sql injection saldırıları için ekstradan aşağıdaki gibi bir önlem alıyorum..
    function safe($x) {
    $x = strip_tags(html_entity_decode($x));
    $x = str_replace("zararlı kod","",$x);
    return $x;
    }
    bu geliştirilebilir vs..
  • 28-09-2017, 18:18:38
    #11
    Üyeliği durduruldu
    Rahatlıkla normal sistemden farkı yok kolaylığı var diyebilirim.
  • 28-09-2017, 22:48:25
    #12
    Üyeliği durduruldu
    Fonksiyondan ziyade, exec ile sorgularsanız herşey otomatikman hallolmuş olur. query ise veri ne ise onu baz alır.
    Ayrıca get ve postları fonksiyondan geçirebilirsiniz.
  • 28-09-2017, 23:02:25
    #13
    Rojhatx adlı üyeden alıntı: mesajı görüntüle
    Rahatlıkla normal sistemden farkı yok kolaylığı var diyebilirim.
    Kolaylık nerede? yazayım örnek bi kod geç bakalım Hatta bi kod atayım sana aceleyle yazdm çıkıyorm şimdi..Sonucu yazmayı unutma bana

    <?php
    require_once("db.php");
    $id = $_GET["id"];
    $la = $db->prepare("SELECT * FROM duyurular where id=?");

    $la->execute(array($id));
    $get = $la->fetchAll();
    foreach($get as $v) {
    //echo $v['id'];
    echo $v['baslik'];
    }
  • 28-09-2017, 23:04:50
    #14
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    Kolaylık nerede? yazayım örnek bi kod geç bakalım Hatta bi kod atayım sana aceleyle yazdm çıkıyorm şimdi..Sonucu yazmayı unutma bana

    <?php
    require_once("db.php");
    $id = $_GET["id"];
    $la = $db->prepare("SELECT * FROM duyurular where id=?");

    $la->execute(array($id));
    $get = $la->fetchAll();
    foreach($get as $v) {
    //echo $v['id'];
    echo $v['baslik'];
    }
    benim attığım db bunu kullanıyor
  • 28-09-2017, 23:06:02
    #15
    Üyeliği durduruldu
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    Kolaylık nerede? yazayım örnek bi kod geç bakalım Hatta bi kod atayım sana aceleyle yazdm çıkıyorm şimdi..Sonucu yazmayı unutma bana

    <?php
    require_once("db.php");
    $id = $_GET["id"];
    $la = $db->prepare("SELECT * FROM duyurular where id=?");

    $la->execute(array($id));
    $get = $la->fetchAll();
    foreach($get as $v) {
    //echo $v['id'];
    echo $v['baslik'];
    }
    şuan bir websitesinde kurulu ise link atabilirmisiniz
  • 28-09-2017, 23:20:13
    #16
    MorNetAjans adlı üyeden alıntı: mesajı görüntüle
    Fonksiyondan ziyade, exec ile sorgularsanız herşey otomatikman hallolmuş olur. query ise veri ne ise onu baz alır.
    Ayrıca get ve postları fonksiyondan geçirebilirsiniz.
    query() zaten bildiğimiz mysql_query gibi...bazı frameworklerde bile query() ile sıkıntılar olabiliyor...eğer aldığınız veri id veya integer bir veriyse intval($id) şeklinde kullanım işinizi görecektir...eğer veri int değilse fonksıyon ile engelleme yapmamız gerekli ya da pdo kullanıyorsak prepare işimizi görecektir..

    bazen pdo yazarken karşımıza time based sql injection da çıkabilmektedir..

    mysqli kullanmak isterseniz ise aşağıdaki class ı önerebilirim..

    https://github.com/joshcam/PHP-MySQLi-Database-Class

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 23:19:43 -->-> Daha önceki mesaj 23:06:13 --

    theykk adlı üyeden alıntı: mesajı görüntüle
    benim attığım db bunu kullanıyor
    detaylı olarak incelemedim fakat tayfun erbilenin öyle bi hata yapacağını sanmam.
    @FastPHP; emin misiniz olduğundan?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 23:20:13 -->-> Daha önceki mesaj 23:19:43 --

    Rojhatx adlı üyeden alıntı: mesajı görüntüle
    şuan bir websitesinde kurulu ise link atabilirmisiniz
    yolladım
  • 29-09-2017, 00:14:36
    #17
    Developer
    BoraBozdogan adlı üyeden alıntı: mesajı görüntüle
    query() zaten bildiğimiz mysql_query gibi...bazı frameworklerde bile query() ile sıkıntılar olabiliyor...eğer aldığınız veri id veya integer bir veriyse intval($id) şeklinde kullanım işinizi görecektir...eğer veri int değilse fonksıyon ile engelleme yapmamız gerekli ya da pdo kullanıyorsak prepare işimizi görecektir..

    bazen pdo yazarken karşımıza time based sql injection da çıkabilmektedir..

    mysqli kullanmak isterseniz ise aşağıdaki class ı önerebilirim..

    https://github.com/joshcam/PHP-MySQLi-Database-Class

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 23:19:43 -->-> Daha önceki mesaj 23:06:13 --


    detaylı olarak incelemedim fakat tayfun erbilenin öyle bi hata yapacağını sanmam.
    @FastPHP; emin misiniz olduğundan?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 23:20:13 -->-> Daha önceki mesaj 23:19:43 --


    yolladım
    Sunucuya bağlı bu durum. Kabaca göz attım magic quotesa güvenerek kütüphane geliştirilmez. Ben kullanmanızı önermiyorum, isteyen tabiki kullanabilir
    Tayfun erbilen dediğiniz doIandırıcı olan mı?
  • 29-09-2017, 12:53:09
    #18
    @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 );
    }