|
SQL Enjeksiyonu |
|
|
Veritabanı uygulamaları önlemler alınmadığı takdirde SQL Enjeksiyonu saldırılarına karşı savunmasızdırlar. Veritabanı tablo yapısını bilen veya tahminde bulunan bir saldırgan, girdi alanlarında beklenmeyen girişler yaparak normal yollardan erişemediği bilgilere erişebilir veya veri tabanındaki bilgilere ciddi zararlar verebilir. Örnek: SELECT * FROM EMPLOYEE
Eğer kullanıcı, sayfadaki form alanındaki DEPT adlı girdi alanına aşağıdaki gibi bir değer girerse
Çözümlenenen SQL söyle olacaktır.
Bu şekilde bir müdahale ile EMPLOYEE tablosondaki tüm kayıtlara erişebilme ihtimali vardır.
Gerekli önlemler alınmadığı durumda MoreMotion uygulamaları da bu tür saldırılara karşı savunmasız kalabilir. MoreMotion bu tür saldırıların büyük bir çoğunluğunu kendiliğinden önleyecektir. Diğer kalan kısmı için ise neler yapılması gerektiği aşağıda açıklanmıştır. SQL Enjeksiyonu hakkında daha fazla bilgi... Not: Lütfen bölümü sonuna kadar okuyun. Bu tür saldırıları önlemek için MScript sembolleri kullanırken 'n:', 'b:' gibi veri tipi tanımlayıcıları veya 'q' tanımlayıcısını kullanılmalıdır. Örnek:
Çözümlenen SQL:
'q' tanımlayıcısı çözümlenen değer içinde bulunan tırnak karakterlerini çiftleyerek, tırnağın SQL ifadesinde metin sabitinin bir parçası olmasını sağlar. Bir başka örnek: WHERE ID = @vof(n:ID)
ID alanına "5; DROP TABLE EMPLOYEE" gibi bir değer girilerek çok tehlikeli bir saldırı yapılsa da, 'n:' veri tipi tanımlayıcısı sayesinde bir hata oluşacak ve SQL işletilmeyecektir. Girdi alanına girilen değerlerin, doğal olarak, form gönderilmeden önce kontrol edilmesi gerekir. Ancak uygulamayı çökertmek isteyen biri form üzerinden değilde tarayıcının adres çubuğuna yazacağı komutlar ile bu tür saldırıları gerçekleştirebilir. display.doms?pg=ShowEmployee&ID=15 (Beklenen Komut) display.doms?pg=ShowEmpoyee&ID=15 or 1 = 1 (Müdahale edilmiş Komut) SELECT * FROM PRODUCTS
Yerleşik Önlemler MoreMotion aşağıdaki kuralları uygulayarak, SQL Enjeksiyonlarına karşı kendiliğinden önlemler alır. Kural 1: Bir MScript fonksiyonu, satır üzerinde tırnaklar içinde (SQL metin sabitinin içinde) kullanılmış ise fonksiyonun döndürdüğü değer içinde yer alan tırnaklar çiftlenir. Kural 2: Bir MScript fonksiyonu satır üzerinde tırnaklar içinde kullanılmamış ise ve öncesinde '=', ',' veya '(' karakterinde biri varsa fonksiyonun döndürdüğü değer kontrol edilir. Eğer değer özel karakterler veya boşluk içeriyorsa hata oluşturularak SQL'in işletilmesi önlenir. Bu kuralların geçerli olmadığı durumlarda, geliştirici gerekli tanımlayıcıları açıkça kullanarak önlem almalıdır. Örnekler:
|