• 04-01-2011, 18:35:22
    #1
    Merhaba arkadaslar,
    Sizlerden iki merak ettigim konu hakkinda bilgi isteyecegim.
    Birincisi bazi arkadaslarimla soylesilerde bulundum, beni biraz elestirdiler gelismen lazim diye. Arkadasim bana su lafi soyledi: "Senin sorgularin 5 saniyede benim sorgularim 0,4 saniyede 500 satir cikarir." Biraz arastirdim http://php.net/manual/en/language.oop5.php bu linkle alakasi var sanirim. Daha hizli sorgu & result icin bana onerileriniz var mi?

    Ikinci sorunum ise sql injection hakkinda, yaptigim scriptte soyle bir sorun varmis(!) kullanicilar id password cekebiliyor fakat veritabaninda update vs. yapamiyorlarmis.

    SQL Fonksiyonum(Basit bi fonksiyon sanirim):

        
    FUNCTION antisql($text) {
          $text=htmlspecialchars($text);
          $text=str_replace("'", "", $text);
          $text=str_replace("update", "", $text);
          $text=str_replace("UPDATE", "", $text);
          $text=str_replace("from", "", $text);
          $text=str_replace("FROM", "", $text);
          $text=str_replace("drop", "", $text);
          $text=str_replace("DROP", "", $text);
          $text=str_replace("select", "", $text);
          $text=str_replace("SELECT", "", $text);
          $text=str_replace("delete", "", $text);
          $text=str_replace("DELETE", "", $text);
          $text=str_replace("insert into", "", $text);
          $text=str_replace("INSERT INTO", "", $text);
          $text=str_replace("where", "", $text);
          $text=str_replace("WHERE", "", $text);
          $text=str_replace("procedure", "", $text);
          $text=str_replace("PROCEDURE", "", $text);
          $text=str_replace("exec", "", $text);
          $text=str_replace("EXEC", "", $text);
          $text=str_replace("--", "", $text);
          return $text;   
        }
  • 04-01-2011, 18:47:14
    #2
    function antisql($text) {
    $degistir=array('icerik','icerik2'); // arttirabilirsiniz tek satırda...
    $text=str_replace($degistir,'',strip_tags(mysql_escape_string($text)));
    return trim($text);
    }
    php 5.2+

    sorgunuzuda yazin onada bakalim...
  • 04-01-2011, 18:51:32
    #3
    oop adlı üyeden alıntı: mesajı görüntüle
    function antisql($text) {
    $degistir=array('icerik','icerik2'); // arttirabilirsiniz tek satırda...
    $text=str_replace($degistir,'',strip_tags(mysql_escape_string($text)));
    return trim($text);
    }
    php 5.2+

    sorgunuzuda yazin onada bakalim...
    hocam OBDC(MSSQL) tabanli veritabani..
  • 04-01-2011, 18:53:09
    #4
    ThirtySeven adlı üyeden alıntı: mesajı görüntüle
    hocam OBDC(MSSQL) tabanli veritabani..
    verdiğim fonksiyondaki gerekli alanı değişip uygulayın deneyin, eğer sorun devam ederse filtre uygulamadığınız bir yer veya sunucu kaynaklı bir sorun olabilir bu şekilde inj yememesi gerekli
  • 04-01-2011, 18:56:50
    #5
    Üyeliği durduruldu
    PDO kullanın otomatik escape yapar

    $sth = $db ->prepare('SELECT * FROM table WHERE id = :id');
    $sth->bindParam(':id', $value);
  • 04-01-2011, 18:59:32
    #6
    BHCoder adlı üyeden alıntı: mesajı görüntüle
    PDO kullanın otomatik escape yapar

    $sth = $db ->prepare('SELECT * FROM table WHERE id = :id');
    $sth->bindParam(':id', $value);
    Hocam biraz daha aciklayici olabilir misiniz? Yeniyim de daha lutfen kusuruma bakmayin

    oop adlı üyeden alıntı: mesajı görüntüle
    verdiğim fonksiyondaki gerekli alanı değişip uygulayın deneyin, eğer sorun devam ederse filtre uygulamadığınız bir yer veya sunucu kaynaklı bir sorun olabilir bu şekilde inj yememesi gerekli
    Hocam inputa su degeri girdim
    ' delete from userdata --
    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'from'., SQL state 37000 in SQLExecDirect in C:\AppServ\www\usercp\odemebildirimi.php on line 80
    Boyle bir hata verdi.
  • 04-01-2011, 19:07:01
    #7
    Üyeliği durduruldu
    ThirtySeven adlı üyeden alıntı: mesajı görüntüle
    Hocam biraz daha aciklayici olabilir misiniz? Yeniyim de daha lutfen kusuruma bakmayin

    bunlar kapsamlı konu, güvenlik üzerine yoğunlaşman lazım

    $get = '555 DELETE UNION UPDATE';
    echo preg_replace('@[^0-9]@','', $get);
    
    // çıktı -- 555

    PDO kullanım için
    http://www.oguzkoc.com.tr/php-data-object-pdo/
  • 04-01-2011, 21:57:18
    #8
    function antisql($veri){
    $queryString = $veri;  
    if ((stristr($queryString,'%20union%20')) OR   
            (stristr($queryString,'/*')) OR   
            (stristr($queryString,'*/union/*')) OR   
            (stristr($queryString,'union')) OR  
            (stristr($queryString,'select')) OR  
            (stristr($queryString,'insert')) OR  
            (stristr($queryString,'c2nyaxb0')) OR   
            (stristr($queryString,'+union+'))  OR   
    	(stristr($queryString,'txt')) OR  
            ((stristr($queryString,'cmd=')) AND (!stristr($queryString,'&cmd'))) OR   
            ((stristr($queryString,'exec')) AND (!stristr($queryString,'execu'))) OR   
            (stristr($queryString,'concat'))) {  
        die("Kaybol lamer");  
        }  
    	}
  • 05-01-2011, 00:40:26
    #9
    ThirtySeven adlı üyeden alıntı: mesajı görüntüle
    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'from'., SQL state 37000 in SQLExecDirect in C:\AppServ\www\usercp\odemebildirimi.php on line 80
    Boyle bir hata verdi.
    fonksiyondaki mysql_escape_string değerini mysql_real_escape_string yapip denermisin...