Önce, kendimce sql injection’ın bir tanımını yapayım:

Sql injection kötü niyetli kişilerin bir web sitesinin querystring yada form değerleri vasıtasıyla otomatik olarak ürettiği sql komutlarının içeriğine müdahale etmektir. (umarım doğrudur)
//Not yönetici arkadaşlar örnek kısmını silmekte serbesttir.

Peki bu nasıl yapılır? Örnek:

http://www.bilmemne.com/bilmemne.aspx?ID=5

gibi bir satırı

http://www.bilmemne.com/bilmemne.aspx?ID=5; DROP Table Makaleler —

şekline getirmekle yapılabilir yada web sitesinin üye girişi kısmına kullanıcı adı bölümüne yine benzer bir ekleme yapılabilir.
Peki bu illetden en kolay şekilde nasıl kurtuluruz? Tamam hemen google’a girelim “SQL Injection” yazalım ve işte karşımızda 100 milyon tane makale, bir dakika, bunların hepsinde aynı şey yazıyor;

İşte SQL Injection’dan anında kurtulmanız için gereken 3 adım!
1- Parameterized Sql kullanın
2- Veritabanına asla ve asla “admin” yetkilerine sahip bir kullanıcı adıyla giriş yapmayın. Bunun yerine kısıtlı haklara sahip bir kullanıcı adını kullanın.
3- Kullanıcıların gönderdiği bilgilere sakın güvenmeyin farklı noktalarda defalarca kontrol edin.
Makalelerde herşey toz pembe gözüküyor ama iş başa düşünce öyle olmuyor maalesef, şimdi burada ben basit bir regular expression yazdım ve kendim biraz test ettim, iyi sayılabilir.

(Boşlukları yok sayalım)
(?( \’+ | \;+ ) \s* (SELECT|INSERT|UPDATE|DELETE|OR|AND|DROP|GRANT|REV OKE|TRUNCATE))
Bu deseni yazarken düşündüğüm şey şuydu;

1- Saldırgan en başta tek tırnak işareti atmalıki “şifre kısmını” kandıran bir enjeksiyon yapabilsin, yada querystring’e ek yapabilmesi için en az bir kez noktalı virgül atması gerekir, bu yüzden baştaki ( \’+ | \;+ ) kısmını ekledim daha sonra ise desen yine basit sql kelimelerini gösteriyor. Burada dikkat edilmesi gereken bir nokta var, o da, bu deseni kandırmanın bir yolu olduğu peki nasıl? eğer kişi tek tırnak yada noktalı virgülden sonra “/* */” stilinde bir “yorum kısmı” eklerse ne olacak? eğer asp.net kullanıyorsanız tamam problem yok çünkü “validateRequest” özelliğini kapatmamışsanız, asp.net kullanıcıdan gelen bilginin potansiyel tehlikeler içeryor olduğu gerekçesiyle sayfanın çalışmasını durdurur, peki ya PHP, yada ASP yada JSP bunu yapıyor mu? ben anlamam bunlardan, bilmiyorum, bilen varsa söylesin.

bunun için desene küçük bir ek yaptım, sonuç olarak
(tamam ek kısım kaba duruyor biraz daha değişik metodlar kullanılabilir.)
(?( \’+ | \;+ ) \s* [/\* (\w*W*\d*\D*\s*) \*/]* (SELECT|INSERT|UPDATE|DELETE|OR|AND|DROP|GRANT|REV OKE|TRUNCATE))
burada bilmediğim şey daha ne tür enjeksiyon metodları olduğu yada başka ne şekillerde bu desenin kandırılabileceği, daha doğrusu, veritabanına etkiyebilecek bir sql komutunun ne şekilde bu desene takılmadan içeri girebileceği? Arkadaşlardan isteğim bu konuda yardımcı olmaları.

Categories:

Tags:

3 Responses

  1. PHP coderlar formdan gelen verileri aşağıdaki gibi bir süzgeçden geçirerek sql injection saldırılarından korunabilirler.. (sadeec a-z , A-Z ve 0-9 a izinli)

    if ((eregi(“[^a-zA-Z0-9]”, $degisken1)) || (eregi(“[^a-zA-Z0-9]”, $degisken2)) || (eregi(“[^a-zA-Z0-9]”, $degisken3)))
    {
    echo “sql injection saldırısı tespit edildi.”;
    } else {
    echo ‘Merhaba, burası Ana sayfa..;
    }

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir