ASP.NET Sql İnjection Korunma
ASP.NET’te Sql İnjectiondan nasıl korunabileceğinizi anlatacağım.
Sql İnjection, Sql sorgularının arasına meta karakterler koyarak sisteme girmek, veri çekmek, veri düzenlemek, veri silmek gibi işlemlerin yapılabildiği bir saldırı yöntemidir. Bu saldırılardan korunmak için yapılabilecek bir çok yöntem vardır. Ben birkaç tanesini anlatacağım.
1) Karakter Kısıtlaması
Karakter kısıtlaması olarak bahsettiğimiz şey inputlara girilecek veri tipine göre kısıtlama yapmaktır. Örneğin Tc girilecek bir alana rakamdan başka bir veri girilmemesini sağlarsanız saldırılara karşı bir çözüm yolu üretmiş olursunuz.
2) Parametre Kullanılması
SQL sorgusu kullanırken inputlardan alınan veriler direk olarak Komutun içine yazılmamalı parametre olarak gönderilmelidir. Aşağıdaki örneği inceleyerek kendinize göre düzenleyebilirsiniz.
SqlCommand komut = new SqlCommand("select * from Giris where Kullaniciadi=@kad and Sifre=@sifre", baglan.con); komut.Parameters.AddWithValue("@kad",kad.Text); komut.Parameters.AddWithValue("@sifre",sifre.Text); SqlDataReader dr = komut.ExecuteReader();
3) İnputlara Karakter Kontrolü Yapılması
Sql İnjection için kullanılan belirli özel karakterler ( ‘ / ; / = ) vardır. Bunları Replace komutu kullanarak boşluk ile değiştirirseniz saldırı ihtimalini ortadan kaldırmış olursunuz. Bunun için bir class oluşturuyoruz ve aşağıdaki kodu içine yapıştırıyoruz.
public class Saldiri { public string Korun(string Input) { string data = Input.Trim(); data = data.Replace(">", ""); data = data.Replace("<", ""); data = data.Replace(">", ""); data = data.Replace("<", ""); data = data.Replace("--", ""); data = data.Replace("'", ""); data = data.Replace(";", ""); data = data.Replace("=", ""); data = data.Replace("char ", ""); data = data.Replace("delete ", ""); data = data.Replace("insert ", ""); data = data.Replace("update ", ""); data = data.Replace("select ", ""); data = data.Replace("truncate ", ""); data = data.Replace("union", ""); data = data.Replace("script ", ""); return data; } }
Kullanırken Textboxın textchanged eventine yada butonun click eventine yazarak kullanabilirsiniz. Kullanım şekli:
Saldiri nesne = new Saldiri(); kad.Text = injec.Korun(kad.Text);
C99 gibi sheller hakkında bilgi paylaşabilir misiniz ?
Bu konuda pek bilgi sahibi değilim ama en kısa sürede öğrenip paylaşacağım.
Thanks for this article.