Dedefon adlı üyeden alıntı:
mesajı görüntüle
SQL Injection Nedir?
27
●2.435
- 02-11-2012, 09:57:26Kimlik doğrulama veya yönetimden onay bekliyor.loc 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.. - 02-11-2012, 10:11:28Romansanta 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? - 02-11-2012, 10:21:27şimdi düşün ki OfisSoft hocamınızın Form'dan vermiş olduğu örnekleri $_POST değilde $_GET olarak dusun..loc adlı üyeden alıntı: mesajı görüntüle
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, 11:42:43eğ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.loc adlı üyeden alıntı: mesajı görüntüle
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:29digiklan adlı üyeden alıntı: mesajı görüntüle
RewriteRule ^([^/-]+)/([^/-]+)/([^/-]+)/c/([^/-]+)/([a-zA-Z0-9-_]+)/$ index.php?sub=$1&lang=$2§ion=$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:35Kodu sallada video güzelloc adlı üyeden alıntı: mesajı görüntüle
)
)