Death_AngeL
Banned
- Katılım
- 27 Haz 2005
- Mesajlar
- 602
- Reaction score
- 0
- Puanları
- 0
Arkadaslar SQL Injection birçok hacker kullandigi sql açiklarindan yararlanarak sayfaya index atma veya index teki yazilari degistirme gibi islerde kullanilan bir sql uygulamasidir.Bunu Sitemizde Ares abimiz ve birkaç kisi daha kullanmaktadir.Ama bunu kullanmadan önce ne oldugunu ögrenelim.Bu dökümani microsoft akademilerinde verilen makalelerden aldim.
Veri tabanında çalıştırılacak olan komutları sql cümlecikleri ile parça parça oluşturmak ne yazık ki, bir çok kişinin tercih ettiği bir yöntemdir. Oysa ki ekran tarafında hiç bir sql cümleciği bulunmamalıdır. Bu altyapısal bir problemdir. Kullanıcının girdiği bir bilgiye göre sql cümleciğini oluşturmak güvenlik açısından çok büyük problemler yaratmaktadır. Kullanıcı kendisinden bilgi beklenen yerde her türlü ifadeyi girebilir. Örneğin, yaşını yazmasını istediğiniz bir kullanıcı yaşını yazması gereken yere adını yazabiliyor, ve program çalışma zamanında hata vermesi durumunda bu yazılımı geliştiren kişilerin bir hatası olarak yorumlanıyor. Bu noktada yazılım geliştirici kullanıcının girdiği tüm bilgilerin geçerlilik kontrollerini yapmak zorundadır. Bu geçerlilik kontrolleri için ASP.NET’te validator (doğrulayıcı) kontrolleri tanımlanmıştır ve doğrusu bu kontrolleri kullanarak kullanıcının girdiği bilgilerinin geçerliliği denetlemektir.
Kullanıcının yaş beklenen yere adını yazması oldukça masum bir hatadır. Eğer ki kullanıcıdan alınan bilgiyi olduğu gibi SQL cümleciğinin içine ekleyip kullanıyorsanız, daha büyük sorunlarınız var demektir. Çok basit anlamda bir konsol uygulaması geliştirelim. Bu konsol uygulamasında kullanıcıdan bir kullanıcı adı ve şifre alalım. Kullanıcı adı ve karşılık gelen şifrelerimizi de alışageldiği üzere veri tabanında “Users” tablosunda saklayalım. Sistemimizde tanımlı kullanıcılar şu şekilde tanımlanmış olsun:
Öncelikle sistemimizde tanımlı şifrelere bir eleştiri getirelim. Sistemimizdeki şifrelerin hiç biri yeterince güvenli değil. Sadece “admin” kullanıcısının şifresi biraz güvenilir kabul edilebilir ancak kullanıcı adının şifrenin içinde tekrarlanması hatalı bir yaklaşımdır. Uygulamamızı ise şu şekilde geliştirmiş olalım:
Veri tabanında çalıştırılacak olan komutları sql cümlecikleri ile parça parça oluşturmak ne yazık ki, bir çok kişinin tercih ettiği bir yöntemdir. Oysa ki ekran tarafında hiç bir sql cümleciği bulunmamalıdır. Bu altyapısal bir problemdir. Kullanıcının girdiği bir bilgiye göre sql cümleciğini oluşturmak güvenlik açısından çok büyük problemler yaratmaktadır. Kullanıcı kendisinden bilgi beklenen yerde her türlü ifadeyi girebilir. Örneğin, yaşını yazmasını istediğiniz bir kullanıcı yaşını yazması gereken yere adını yazabiliyor, ve program çalışma zamanında hata vermesi durumunda bu yazılımı geliştiren kişilerin bir hatası olarak yorumlanıyor. Bu noktada yazılım geliştirici kullanıcının girdiği tüm bilgilerin geçerlilik kontrollerini yapmak zorundadır. Bu geçerlilik kontrolleri için ASP.NET’te validator (doğrulayıcı) kontrolleri tanımlanmıştır ve doğrusu bu kontrolleri kullanarak kullanıcının girdiği bilgilerinin geçerliliği denetlemektir.
Kullanıcının yaş beklenen yere adını yazması oldukça masum bir hatadır. Eğer ki kullanıcıdan alınan bilgiyi olduğu gibi SQL cümleciğinin içine ekleyip kullanıyorsanız, daha büyük sorunlarınız var demektir. Çok basit anlamda bir konsol uygulaması geliştirelim. Bu konsol uygulamasında kullanıcıdan bir kullanıcı adı ve şifre alalım. Kullanıcı adı ve karşılık gelen şifrelerimizi de alışageldiği üzere veri tabanında “Users” tablosunda saklayalım. Sistemimizde tanımlı kullanıcılar şu şekilde tanımlanmış olsun:

Öncelikle sistemimizde tanımlı şifrelere bir eleştiri getirelim. Sistemimizdeki şifrelerin hiç biri yeterince güvenli değil. Sadece “admin” kullanıcısının şifresi biraz güvenilir kabul edilebilir ancak kullanıcı adının şifrenin içinde tekrarlanması hatalı bir yaklaşımdır. Uygulamamızı ise şu şekilde geliştirmiş olalım: