Bu durumda sayfamızdaki bütün html kodlarını engellememiz lazım ancak bu sefer forumumuza bir kalın text göndermek isteyen kullanıcıyıda engellemiş oluruz bu kullanıcıyı kısıtlamak demektir.
Bu ve bunun gibi durumlara istisna html filtrelemesi yapmamız gerekiyor.Ben sizlere bu gün bunu asp.net içerisinde nasıl yapabileceğimizi göstereceğim.
Sayfamıza bir adet DataList,Buton,TextBox ekliyoruz ve sayfamızın load event’ine yani sayfamız açıldığında olacak olaylara bakıyoruz.
protected void Page_Load(object sender, EventArgs e)
{
doldur();
}
Doldur isimli bir method var .Bu methodumuz sayfamızın içerisine verilerimizi çekiyor bir göz atalım!
Void tipinde ve az öncede söylediğim gibi veritabanımızdan veri çekiyor.
void doldur()
{
SqlConnection baglanti = new SqlConnection("Data Source=.;Initial Catalog=AI;Uid=sa;Pwd=12");
baglanti.Open();
SqlCommand cmd = new SqlCommand("select * from tema", baglanti);
DataList1.DataSource = cmd.ExecuteReader();
DataList1.DataBind();
}
Şimdi butonumuzun tıklanma olayında textbox’daki verilerimizi kaydedeceğimizi söylemiştik.Ancak bu verileri filtrelememiz lazım.
public string temizle(string karakter)//Textbox'dan gelen verilerin içerisindeki <> verileri [] olarka değiştiren method
{
if (karakter.Contains("<"))
{
karakter = karakter.Replace("<", "[");
}
if (karakter.Contains(">"))
{
karakter = karakter.Replace(">", "]");
}
return karakter;
}
Gördüğünüz gibi textbox’dan dbmize gidicek olan veriler içerisindeki <> karakterlerini [] olarak değiştiriyoruz.
Butonumuzun click event’indeki kodlarına bakalım.
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection baglanti = new SqlConnection("Data Source=.;Initial Catalog=AI;Uid=sa;Pwd=12");
baglanti.Open();
SqlCommand cmd = new SqlCommand("insert into tema(my) values(@text)", baglanti);
cmd.Parameters.Add("text",temizle(TextBox1.Text));
cmd.ExecuteNonQuery();
doldur();
}
cmd.Parameters.Add("text",temizle(TextBox1.Text));
Şurada gördüldüğü gibi verilerimiz db mize gitmeden önce temizle fonksiyonumuza ugruyor istemediğimiz karakterlerimizi replace ediyor yani değiştiriyor ve daha sonra veritabanımıza kaydediyor.Buraya kadar herşey normaldi ancak az önce makalemizin en başındada belirttiğim gibi peki kullanıcımı Dekan is black coder şeklinde bir kod girseydi onunda karakterlerini <> replace ederek şu şekilde dbmize gömecekti ki öyle gömmesine izin veriyoruz. [b]Dekan is bad coder[/b] işte dananın kuyrugunun koptugu yer burası browserımıza db’mizden gelen [b]Dekan is bad coder[/b] kodlarımızı derletirken ne yapmamız gerekiyor ? Nasıl bir yol izlemeliyiz ? her karakter için oturup if kontrolü yazmaya kalkarsak javascript,css,html için neredeyse 250 tane if olacak
Ve bazı bilmediğimiz (çok kullanılmayan) html fonksiyonlarıda var işte ters algoritma kurmamız lazım yani sayfamızda bizim izin verdiğimiz kodlar dışında olanları yorumlama ! dememiz lazım
Oda şu şekilde oluyor.
public static string aqua(string karakter)
{
if (karakter.Contains("[b]"))
{
karakter = karakter.Replace("[b]", "");
}
if (karakter.Contains("[/b]"))
{
karakter = karakter.Replace("[/b]", "");
}
if (karakter.Contains("[i]"))
{
karakter = karakter.Replace("[i]", "");
}
if (karakter.Contains("[/i]"))
{
karakter = karakter.Replace("[/i]", "");
}
return karakter;
}
Not : Burada methodumuzu static yapmamızın amacı az sonra göreceğiniz aspx kodları içerisinde fonksiyonumuzu çagırabilmemiz içindir.
Aspx kodlarımız şu şekilde;
<%#default_aspx.aqua(Eval("my").ToString()) %>
Yukarıda form’a ekleyeceğimiz veriler arasında datalisti söylememin amacı buydu kodlarımızı canlı canlı görmemiz lazım

Yukarıdaki resimde gördüğünüz gibi my kolonumuzdan gelen verilerimizi filtreliyor peki my kolonumuz db de nasıl ? yani içerisinde nasıl veriler tutuyor ?

Yani anlatmak istediğim runtime esnasında gelen kodlarımızı asp.net ile değiştirip browser’a değiştirdiğimiz kodlar ile derlettirmek yani db’mizden gelen verilerimiz hiçbir şekilde html olmamı kullanıcılara asla güvenmeyin!
Peki ekstra bir durumumuz var ya db’mizde eskiden html kodlar olsaydı yani ?
[[h5]Yaptklarm sadece yaptzaman anlayabilirsiniz.[/h5]
[h1]Kerem[/h1]
<-h1>Kerem-h1> //Kod blogda yorumlandığı için editlendi
[script]Alert(1)[/script]
[b]Kerem[/b]
[i]Kerem[/i]
NULL
Şu şekilde olsaydı ne olacaktı ? tabiî kide 3. satırda olan verimiz
O yüzden ilk önce tablomuzdaki <> arakterlerimizi T SQL’in replace fonksiyonu ile değiştirmemiz lazım
Yazan Dekan [a.k.a] 17
0 yorum:
Yorum Gönder