• 02-11-2012, 09:53:33
    #19
    Dedefon adlı üyeden alıntı: mesajı görüntüle
    Sql injectionla ugrasmamak ve daha iyi seo icin htaccess yontemiyle
    haber/2-haber-basligi.html
    Gibi yapabilirsiniz hem sql inj. Onler hem adres satirinda haber ismini bastirip daha iyi indexler alina bilir


    Sent from my iPhone using Tapatalk
    Seo yaparak sql injection önlendiğini ilk defa duydum. Sistemimde linklerin tamamı zaten seolu. Seo konusunda herhangi bir problemim yok. Ama bunun bir çözüm olacağını düşünmüyorum.
  • 02-11-2012, 09:57:26
    #20
    Kimlik doğrulama veya yönetimden onay bekliyor.
    loc adlı üyeden alıntı: mesajı görüntüle
    Seo yaparak sql injection önlendiğini ilk defa duydum. Sistemimde linklerin tamamı zaten seolu. Seo konusunda herhangi bir problemim yok. Ama bunun bir çözüm olacağını düşünmüyorum.

    Kullanıcı birimi olmasada haber.php?no=2 dediğinizde 2 dışarıdan değiştirilebilir. SQL Injection sadece form değil URL aralıcılığı ile de gerçekleştirilebileceğinden URL'den aldığınız değerleride kontrol etmelisiniz..

    No=2'den gelen değer integer'mı 2 nolu haber/makale/yazı/yorum/sayfa ıvır zıvır varmı gibisinden..
  • 02-11-2012, 10:11:28
    #21
    Romansanta adlı üyeden alıntı: mesajı görüntüle
    Kullanıcı birimi olmasada haber.php?no=2 dediğinizde 2 dışarıdan değiştirilebilir. SQL Injection sadece form değil URL aralıcılığı ile de gerçekleştirilebileceğinden URL'den aldığınız değerleride kontrol etmelisiniz..

    No=2'den gelen değer integer'mı 2 nolu haber/makale/yazı/yorum/sayfa ıvır zıvır varmı gibisinden..
    $no = $_GET['no'];
    Şeklinde alıyorum ve sql sorgumun içinde

    where no='$no'
    şeklinde kullanıyorum. Yani sorgumda sadece id ye göre çekiyorum verilerimi farklı bir şart yok.

    products/10/fire-alarm/10/functional-modules/
    şeklinde de bir link yapısı oluşturdum. Şimdi burada nasıl bir önlem almalıyım?
  • 02-11-2012, 10:21:27
    #22
    loc adlı üyeden alıntı: mesajı görüntüle
    $no = $_GET['no'];
    Şeklinde alıyorum ve sql sorgumun içinde

    where no='$no'
    şeklinde kullanıyorum. Yani sorgumda sadece id ye göre çekiyorum verilerimi farklı bir şart yok.

    products/10/fire-alarm/10/functional-modules/
    şeklinde de bir link yapısı oluşturdum. Şimdi burada nasıl bir önlem almalıyım?
    şimdi düşün ki OfisSoft hocamınızın Form'dan vermiş olduğu örnekleri $_POST değilde $_GET olarak dusun..

    haber.php?no=2;Drop%20database%20users

    seklinde bir URL ile senin sorgunu

    SELECT * FROM Tablo WHERE no=2;Drop database users

    şekline çevirmiş oluyor.

    en basitinden

    $no = (int)$_GET['no'];

    olarak oluşturursan $no değişkenini gelen veri içerisindeki ilk sayısal değerleri alır sonrasını es geçer. daha sonra bu numaralı haber/makale varmı diye kontrol ettirip kullanıcıya çıktıyı verebilirsin...
  • 02-11-2012, 10:31:33
    #23
    Ozaman her $_GET ve $_POST değerlerine bu şekilde filtreleme yapıyorum. Teşekkürler bilgilendirme için.
  • 02-11-2012, 11:42:43
    #24
    loc adlı üyeden alıntı: mesajı görüntüle
    Seo yaparak sql injection önlendiğini ilk defa duydum. Sistemimde linklerin tamamı zaten seolu. Seo konusunda herhangi bir problemim yok. Ama bunun bir çözüm olacağını düşünmüyorum.
    eğer dosya isimlerinizi saklıyorsanız htaccess ile url rewrite yani seo url de bir çeşit korunma yöntemidir. çünkü dosya isminizi ve gönderdiğiniz get değişkeninin ismini saklarsınız.

    eğer
    RewriteRule ^haber-(.*)-(.*)\.html$ haber.php?id=$1 [L,NC]
    şeklinde rewrite kuralı yazarsanız elbette korunma olmaz
    ama
    RewriteRule ^haber-([0-9]+)-(.*)\.html$ haber.php?id=$1 [L,NC]
    şeklinde yazarsanız id alanına rakam dışında bir değer gelirse rewrite olmaz ve 404e düşer.

    Elbette haber.php dosyasından kullanıcının habersiz olması lazım yani scriptin size özel olması lazım. Eğer scriptinizi satıyorsanız ve insanların dosya isimlerinizden ve değişken isimlerinizden haberleri varsa ya da tahmin edilebilir dosya ve değişken isimleri kullanıyorsanız bu bir koruma değildir.

    Önce htaccess ile rewrite yaparken karakter sınırlaması, sonra gelen her input için karakter kontrolü yapılması beklenilmeyen tiplerin reddedilmesi, sonra da karakter kontrolünü geçen inputların filtrelenmesi lazım

    FİLTRELEME SADECE GET POST DEĞİL İŞLEME GİREN VE MANİPÜLE EDİLEBİLEN TÜM GLOBALLER İÇİN YAPILMALIDIR. user agent, cookie, referrer, post, get...

    Mesela id alanında database tablonuz integer 11 karakter sınır varsa buradan gelen veriyi strlen ile kontrol edersiniz 11 karakterden uzunsa direk işlemi kesersiniz. Verinin içinde olması gereken karakterleri belirlersiniz, eğer beklenen karakterler dışında ascii karakter özel işaret varsa direk işlemi kesersiniz. yani mysql_real_escape_string e girmeden önce verinin kullanılış tipine göre kontroller yapılmalı beklenmeyen türde veride işlem kesilmeli, beklenen türde veri de filtreye sokulmalı.
  • 02-11-2012, 12:07:29
    #25
    digiklan adlı üyeden alıntı: mesajı görüntüle
    eğer dosya isimlerinizi saklıyorsanız htaccess ile url rewrite yani seo url de bir çeşit korunma yöntemidir. çünkü dosya isminizi ve gönderdiğiniz get değişkeninin ismini saklarsınız.

    eğer
    RewriteRule ^haber-(.*)-(.*)\.html$ haber.php?id=$1 [L,NC]
    şeklinde rewrite kuralı yazarsanız elbette korunma olmaz
    ama
    RewriteRule ^haber-([0-9]+)-(.*)\.html$ haber.php?id=$1 [L,NC]
    şeklinde yazarsanız id alanına rakam dışında bir değer gelirse rewrite olmaz ve 404e düşer.

    Elbette haber.php dosyasından kullanıcının habersiz olması lazım yani scriptin size özel olması lazım. Eğer scriptinizi satıyorsanız ve insanların dosya isimlerinizden ve değişken isimlerinizden haberleri varsa ya da tahmin edilebilir dosya ve değişken isimleri kullanıyorsanız bu bir koruma değildir.

    Önce htaccess ile rewrite yaparken karakter sınırlaması, sonra gelen her input için karakter kontrolü yapılması beklenilmeyen tiplerin reddedilmesi, sonra da karakter kontrolünü geçen inputların filtrelenmesi lazım

    FİLTRELEME SADECE GET POST DEĞİL İŞLEME GİREN VE MANİPÜLE EDİLEBİLEN TÜM GLOBALLER İÇİN YAPILMALIDIR. user agent, cookie, referrer, post, get...

    Mesela id alanında database tablonuz integer 11 karakter sınır varsa buradan gelen veriyi strlen ile kontrol edersiniz 11 karakterden uzunsa direk işlemi kesersiniz. Verinin içinde olması gereken karakterleri belirlersiniz, eğer beklenen karakterler dışında ascii karakter özel işaret varsa direk işlemi kesersiniz. yani mysql_real_escape_string e girmeden önce verinin kullanılış tipine göre kontroller yapılmalı beklenmeyen türde veride işlem kesilmeli, beklenen türde veri de filtreye sokulmalı.
    RewriteRule ^([^/-]+)/([^/-]+)/([^/-]+)/c/([^/-]+)/([a-zA-Z0-9-_]+)/$ index.php?sub=$1&lang=$2&section=$3&do=cat&catid=$4&seo=$5& [L,NC]
    Mesela benim htaccess içinde yazdığım kurallardan bir tanesi böyle. Herhangi bir problem oluşturur mu? Birde internette araştırırken şöyle bir kod buldum. Bu kod bu tür açıklar için yeterlimidir?

    $inj = array ('select', 'insert', 'delete', 'update', 'drop table', 'union', 'null', 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'DROP TABLE', 'UNION', 'NULL','order by','order  by');
        for ($i = 0; $i < sizeof ($_GET); ++$i){
            for ($j = 0; $j < sizeof ($inj); ++$j){
                foreach($_GET as $gets){
                    if(preg_match ('/' . $inj[$j] . '/', $gets)){
                        $temp = key ($_GET);
                        $_GET[$temp] = '';
                            exit('<iframe title="YouTube video player" width="800" height="600" src="http://www.youtube.com/embed/bzen6iORGIk" frameborder="0" allowfullscreen></iframe>');
                            continue;
                    }
                }
            }
        }
  • 02-11-2012, 18:01:35
    #26
    loc adlı üyeden alıntı: mesajı görüntüle
    RewriteRule ^([^/-]+)/([^/-]+)/([^/-]+)/c/([^/-]+)/([a-zA-Z0-9-_]+)/$ index.php?sub=$1&lang=$2&section=$3&do=cat&catid=$4&seo=$5& [L,NC]
    Mesela benim htaccess içinde yazdığım kurallardan bir tanesi böyle. Herhangi bir problem oluşturur mu? Birde internette araştırırken şöyle bir kod buldum. Bu kod bu tür açıklar için yeterlimidir?

    $inj = array ('select', 'insert', 'delete', 'update', 'drop table', 'union', 'null', 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'DROP TABLE', 'UNION', 'NULL','order by','order  by');
        for ($i = 0; $i < sizeof ($_GET); ++$i){
            for ($j = 0; $j < sizeof ($inj); ++$j){
                foreach($_GET as $gets){
                    if(preg_match ('/' . $inj[$j] . '/', $gets)){
                        $temp = key ($_GET);
                        $_GET[$temp] = '';
                            exit('<iframe title="YouTube video player" width="800" height="600" src="http://www.youtube.com/embed/bzen6iORGIk" frameborder="0" allowfullscreen></iframe>');
                            continue;
                    }
                }
            }
        }
    Kodu sallada video güzel )
  • 18-01-2013, 14:55:04
    #27
    Bugün yine heryerinden Sql Injection fışkıran bir siteye denk geldim. Bu konuyu yeniden yukarılara çıkarsam faydalı olacak sanırım.