Bilginin Adresi Ana Sayfa
Forum Anasayfası Forum Anasayfası > Bilgisayar Güvenliği / Computer Security > Güvenlik / Security Makaleleri
  Aktif Konular Aktif Konular RSS - SQL Injec. Security Story
  SSS SSS  Forumu Ara   Events   Kayıt Ol Kayıt Ol  GiriÅŸ GiriÅŸ

SQL Injec. Security Story

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
megabros Açılır Kutu Gör
Security Professional
Security Professional
Simge

Kayıt Tarihi: 08-06-2009
Konum: Turkey
Status: Aktif DeÄŸil
Points: 752
Mesaj Seçenekleri Mesaj Seçenekleri   Thanks (0) Thanks(0)   Alıntı megabros Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: SQL Injec. Security Story
    Gönderim Zamanı: 24-08-2009 Saat 00:40

SQL, Structured Query Language anlamına gelir.. Yani Yapisal Sorgu Dil’i diye nitelendiririz..

SQL injection’ın tanımına değinelim..

SQL injection; SQL sorgusu ve komut gönderme yöntemidir..
80. porta gereksinim duyan ve sunucuda kurulan işletim sistemi yerine, sunucudaki sitelerin tabanlarına (ASP, PHP, CGI, vs) bağlı olan sorgu sistemidir.. Örnek verecek olursak; sisteme üye olan userların kullanıcı adları ve şifreleri veritabanına kaydolur.. SQL injection sayesinde SQL sorgulamalarla veritabanına kayıtlı user’ların account’larına erişim sağlayabiliriz..


ASP tabanlı scriptlerdeki SQL Injection bug’larından korunmaktan bahsedeceğim..

Örneğin; ASP tabanlı bir websitemiz olduğunu düşünerek, haber.asp adlı dosyamızın olduğunu varsayalım.. Haber.asp sayfasının detayı için açılan haber_detay.asp?id=1 şeklinde bir gidişat olsun.. Eğer vereceğim kodu; haber_detay.asp dosyasına eklemezseniz, hackerlar tarafından ’ karakteri ile mssql SQL sorgulamalarla, bulunan haberlere rahatlıkla erişebilirler..

Daha önce haber_detay.asp de bulunan kod “ID = REQUEST.QUERYSTRING(”ID”)” şeklinde ise;

ID = REQUEST.QUERYSTRING(”ID”)
IF Not IsNumeric(REQUEST.QUERYSTRING(”id”)) THEN
response.write “Lütfen Gecerli bir id numarası girin.”
response.end
END IF

bu kodlarla değişebilirsiniz..

Ayrı bir metod olarak kullanmış olduğumuz formlardan ötürü ’ karakterini nasıl etkisiz hale getireceğimizden bahsedeceğim..

Örnek olarak form’ları kaydetmek için bulunan form.register.asp dosyasındaki REQUEST.FORM kısmını bir üstte anlattığım gibi güvenli hale getirmeniz gerekir.. Yani vereceğim fonksiyon kodlarını, dosyada en üste koymanız kafii..

Function KarakterTemizle(Veri)
KarakterTemizle = Replace(Veri, “’”, “’’”)
Veri = KarakterTemizle
End Function

Bu fonksiyonu dosyaya yerleştirdikten sonra vereceğim örnekle yanlış ve doğru yolu ayırt edebileceksiniz..

Yanlış olan Hali: GelenVeri = REQUEST.FORM(”GelenVeri”)

Doğru hali: GelenVeri = KarakterTemizle(Request.Form(”GelenVeri”))

Bir başka adımla da yine bu form’lara etki eden kötü karakterleri engelleyeceğiz..

Yine üst kısımda bahsettiğim örnekteki gibi form’ları kaydeden form.register.asp dosyası içinde bulunan REQUEST.FORM kodlarını, vereceğim function’ı sayfanın en üstüne bırakarak güvenlik altına almanız gerekmektedir..

Function KarakterTemizle(Veri)
KarakterTemizle = Replace(Veri, “<”, “<”)
KarakterTemizle = Replace(Veri, “>”, “>”)
Veri = KarakterTemizle
End Function

Bu fonksiyonu dosyaya yerleştirdikten sonra vereceğim örnekle yanlış ve doğru yolu ayırt edebileceksiniz..

Yanlış olan hali: GelenVeri = REQUEST.FORM(”GelenVeri”)

Doğru hali: GelenVeri = KarakterTemizle(Request.Form(”GelenVeri”))

Son olarak belirteceğim durum; gördüğünüz gibi bahsettiğim function’lar birbirine çok yakın.. Her iki function’da da ayrı ayrı incelemeniz açısından ayrı olarak verdim ki amaç; hatayı minimuma indirmek.. Her ikisini de birleştirecek olursak doğru hali şu function’lar olur;

Function KarakterTemizle(Veri)
KarakterTemizle = Replace(Veri, “’”, “’’”)
KarakterTemizle = Replace(Veri, “<”, “<”)
KarakterTemizle = Replace(Veri, “>”, “>”)
Veri = KarakterTemizle
End Function

Son olarakta;

GelenVeri = KarakterTemizle(Request.Form(”GelenVeri”))

haline gelir..

Saygılar..
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu Gör



Bu Sayfa 0.148 Saniyede Yüklendi.