birçok sistemde var olan açıktır fakat açığın kaynaklandığı dizini bulmak ve kapatmak biraz sıkıntılıdır. sözlük de insan yapımı olduğu için mutlaka açıklar olacaktır ve önemli olan bu açıkları minimum seviyeye indirmektir. kapatmak demiyorum, hiçbir sistemin açığı tam olarak kapatılamaz mutlaka sistemde açıklar olacaktır. önemli olan ise bu açıkların bulunduğu takdirde yönetime konu hakkında bilgi vermektir.
Saldırgan, uygulama üzerinde kullanıcı giriş ifadesine SQL ifadeleri ekleyerek güvenlik açığı arar. Bunu gerçekleştirebilmek için SQL ifadelerini ve sözdizimini yeteri kadar bilmek gerekir. Aşağıdaki kod satırı, bu güvenlik açığını göstermektedir:
sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi + " ';"
Yukarıdaki SQL sorgusunda kullaniciAdi alanına kullanıcı girdisi gelecektir, bu girdiye göre veritabanında arama yapılacak ve sonuç olumlu ise yazılımcının belirlediği işlemler gerçekleşecektir. Bu işlemler muhtemelen arayüzünde kullanıcıAdi verisi girişi için bir alana sahip ve bu veriye göre sisteme dahil edilme işlemini ayarlayan uygulama yazılımıdır. Arka planda girilen veriye göre veritabanında karşılaştırma yapacak ve veri veritabanında bulunuyor ise sisteme giriş sağlanacak, bulunmuyor ise sağlanmayacaktır. Günümüzde uygulamalar güvenliğin daha üst düzey olması için kullanıcı adı verisinin yanında parola da istemektedirler. Burada SQL Injection atağının etkili olabileceği bir açık varsa aşağıdaki şekilde:
' or '1'='1
SQL verisini giriş verisi olarak gönderir isek uygulama tabanında çalışacak sorgu:
sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi ' or '1' = '1 + " ';"
şeklinde olur. kullaniciAdi verisi ne olursa olsun '1'='1' koşulu sağlanacağından ve aradaki işlemin OR olmasından dolayı sorgu sonucu her zaman olumlu olacaktır ya da SQL sözdiziminin yorum satırı haline getirme karakterlerini kullanarak:
' or '1'='1' --
' or '1'='1' ({
' or '1'='1' /*
olumlu sonuç elde edilir. Bu karakterlerden sonra gelen tüm karakterler yorum niteliği kazanacaktır ve bir önemi kalmayacaktır.
SQL injection, hazırlanmış bir programın kullanıcı ile etkileşime girdiği input alanlarına, sorguları değiştirmek şeklinde yapılır ve saldırının temel hedefi kullanıcı ile etkileşimde yapılan, kaydetme,giriş kontrolü,verileri açıklama sorgularıdır.
Sql injection saldırılarından korunmak için, bu etkileşim alanlarına (input, kullanıcının klavyeden gidi yapabildiği alanlar) bir denetim getirmektir. Öncelikle javascript ile hazırlanmış bir form kontrolü, ardından da özel karakterleri değiştiren ya da önlerine onları zararsız kılan ters slash karatkeri (\) ekleyen fonksiyonlar ile kontrolünü sağlayarak önüne geçebilirsiniz.
zamanında bir çok "büyük" sitenin çökmesine sebep olan ucuz yöntem. Şu zamanda da sql enjeksiyonu yapılmaktadır, ama enjeksiyon kodları artık bir insanın yazamayacağı kadar karmaşık... Bunun için araç-gereç, alet-erdavat kullanılıyor.
genelde embesil lamerlerin kullandığı bir yöntem. özellikle hazır scriptler üzerinde uygulanır üretmek yerine yıkmayı tercih eden çoluk çocuğun işidir.
genel olarak or = satırı ile yapılırken aynı zamanda sql in comment our özelliği -- ile kullanılabilir. Hala bir çok sitede etkilidir. Ha kime ne faydası olur bunu yapmanın o ayrı konu.
kodlamada yapılan dikkatsizliklerin,unutkanlıkların,acemiliklerin yol açtığı zaafiyetin sebep oldugu url'den yada inputlardan veritabanına sorgu yaparak bilgi elde etmeye,bilgi eklemeye imkan tanıyan olayın ismi.