• 06-09-2008, 02:59:18
    #1
    $_GET , $_POST, $_REQUEST ile form verilerini çektiğimiz bir sayfada mysqlin zararlı ifadelerini filtreler isek sql injcetiondan etkilenmeyiz.
    mysql in özel karakterlerini süzgeçlemesi için mysql_real_escape_string() fonksiyonunu kullanacağız.

    örneğin:

    $isim = mysql_real_escape_string($_POST['isim']);
    bu örnekte kullanıcı forma 'or''=' gibi zararlı bir sql ifadesi girdi diyelim.
    db ye \'or\'\'=\' şeklinde geçirilecektir. yani zararlı olan ' karakteri önüne \ (ters slash) getirilerek sistemce zararsız hale getirilecektir.

    Umarım Faydalı Olur.

    Saygılarımla;
    Yaşar Kemal D
  • 06-09-2008, 03:34:29
    #2
    çok teşekkürler yaşar kemal rep vercem ama daha dün vermiştim..

    merak ettiğim şu; sadece bu fonksiyonu kullanmak heryerde bangır bangır bağrılan SQL injection açıklarının önüne geçebilmek için yeterli midir? birde db ye $isim değerini slash lı bi şekilde kaydediyorsak eğer bu şekilde çıkarırken de o slashları temizlememiz lazım? bunu nasıl yaparız..?

    birde eğer vakit bulduğunuzda, htmlspecialchars ile strip_tags fonksiyonlarının kullanımını açıklayabilirseniz çok memnun olurum..
  • 06-09-2008, 03:36:22
    #3
    Hemen ekleyelim,

    böyle tamamda, echo ederken sqlden çekip stripslashes kullanmak gerekir yoksa ekranda \' gözüküyor
  • 06-09-2008, 03:37:30
    #4
    evet bende bunu merak etmiştim.. kullanımına ufak bi örnek verebilir misiniz?
  • 06-09-2008, 03:47:50
    #5
    addslashes(string);
    stripslashes(string);
    echo addslashes('asd"asd""asdasd"asd\'asds');
    //out:asd\"asd\"\"asdasd\"asd\'asds
    
    echo stripslashes('asd\"asd\"\"asdasd\"asd\\\'asds');
    //out:asd"asd""asdasd"asd'asds
  • 06-09-2008, 08:22:11
    #6
    Benim genelde kullandığım yöntem:
    function temizledegel($string)
    {
    if(get_magic_quotes_gpc())
    {
    $string = stripslashes($string);
    }
    elseif(!get_magic_quotes_gpc())
    {
    $string = addslashes($string);
    }
    $string = @mysql_real_escape_string($string);
    return $string;
    }
     $icerik = temizledegel($_POST[icerik]);
    Başarılar...
  • 06-09-2008, 13:27:24
    #7
    NaCReS adlı üyeden alıntı: mesajı görüntüle
    çok teşekkürler yaşar kemal rep vercem ama daha dün vermiştim..
    merak ettiğim şu; sadece bu fonksiyonu kullanmak heryerde bangır bangır bağrılan SQL injection açıklarının önüne geçebilmek için yeterli midir? birde db ye $isim değerini slash lı bi şekilde kaydediyorsak eğer bu şekilde çıkarırken de o slashları temizlememiz lazım? bunu nasıl yaparız..?
    birde eğer vakit bulduğunuzda, htmlspecialchars ile strip_tags fonksiyonlarının kullanımını açıklayabilirseniz çok memnun olurum..
    htmlspecialchars(); fonksiyonu htmlin zararlı karakterlerini filtreler.
    mesela '<' karakterini '&lt;' buna çevirir
    örn:
    $a = htmlspecialchars("<a href");
    echo $a;
    bazı ufak lamerlar <meta> kodları ile sitenize post yollayıp sitenizi yönlendirmeye çalışır, bu fonksiyonla bunun önüne geçmiş oluruz.


    strip_tags(); fonksiyonu ise izin verilecek html kodlarını belirlememizi sağlar.

    örnek;
    <?php
    $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
    echo strip_tags($text);
    echo "\n";
    
    // Allow <p> and <a>
    echo strip_tags($text, '<p><a>');
    ?>
    ekran çıktısı
    Alıntı
    1. echo: Test paragraph. Other text
    2. echo: <p>Test paragraph.</p> <a href="#fragment">Other text</a>
    gördüğünüz gibi 1. echo (Yazdırma) işleminde hiç bir taga izin vermedik ve ekrana direk metni yazdı. 2. echo işleminde <a> ve <p> taglarına izin verdik işleme alınmadan ekran çıktısında gösterildi.

    umarım faydalı olmuştur.
    iyi günler.
  • 06-09-2008, 13:32:25
    #8
    @darel get_magic_quotes_gpc() bunun tam olarak ne işe yaradığını açıklayabilir misin ?
  • 06-09-2008, 14:49:59
    #9
    yasarkemaldag adlı üyeden alıntı: mesajı görüntüle
    htmlspecialchars(); fonksiyonu htmlin zararlı karakterlerini filtreler.
    mesela '<' karakterini '&lt;' buna çevirir
    örn:
    $a = htmlspecialchars("<a href");
    echo $a;
    bazı ufak lamerlar <meta> kodları ile sitenize post yollayıp sitenizi yönlendirmeye çalışır, bu fonksiyonla bunun önüne geçmiş oluruz.
    strip_tags(); fonksiyonu ise izin verilecek html kodlarını belirlememizi sağlar.
    örnek;
    <?php
    $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
    echo strip_tags($text);
    echo "\n";
    // Allow <p> and <a>
    echo strip_tags($text, '<p><a>');
    ?>
    ekran çıktısı
    gördüğünüz gibi 1. echo (Yazdırma) işleminde hiç bir taga izin vermedik ve ekrana direk metni yazdı. 2. echo işleminde <a> ve <p> taglarına izin verdik işleme alınmadan ekran çıktısında gösterildi.
    umarım faydalı olmuştur.
    iyi günler.
    gayet güzel bir açıklama olmuş.. elinize sağlık..