Anti XSS kütüphanesi .NET platformunda bulunan XSS zafiyetlerini önlemek için oluşturulmuş bir kütüphanedir. Bu kütüphane aracılığıyla XSS payloadları encode edilerek sunucuya gönderilir.
XSS (Cross Site Scripting) hakkında bilgi sahibi olmak için daha önce yazmış olduğumuz makaleye buraya tıklayarak göz atabilirsiniz.
XSS (Cross Site Scripting) hakkında bilgi sahibi olmak için daha önce yazmış olduğumuz makaleye buraya tıklayarak göz atabilirsiniz.
Anti XSS kütüphanesini anlamak ve kullanımını pekiştirmek için küçük bir uygulama yapacağız, uygulamamızı Visual Studio kullanarak C# dilinde yazacağız.
Projemize XSS_Sayfa1 ve XSS_Sayfa2 olarak 2 adet web form ekliyoruz .
Amacımız sayfa1’deki input alanına yazdıklarımızı sayfa2 ye
post etmek.
Sayfa1’e 1 adet textbox ve request işlemimizi yapması için 1
adet buton ekliyoruz.
Kod kısmına gelerek XSS_Class adında bir class ekliyoruz
(Sayfa2’ye göndereceğimiz değeri classta tutacağız.)
public class XSS
{
public static string XSSPayload;
}
Butonun click eventine
gelerek aşağıdaki kodları yazıyoruz. Textboxa yazılan değeri XSS class’ının
XSSPayload özelliğine atıyoruz, sonrasında XSS_Sayfa2.aspx sayfasına
yönlendirilmesini sağlıyoruz.
protected void btnReq_Click(object sender, EventArgs e)
{
XSS.XSSPayload = txtXSS.Text;
Response.Redirect("AntiXSS2.aspx");
}
XSS_Sayfa2’ye gelerek Page_Load eventinde çalışmasını
istediğimiz kod satırlarını yazıyoruz. (Oluşturduğumuz Class’daki XSSPayload özelliğini ekrana yazdırıyoruz.)
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(AntiXSS.XSS_Class.XSSPayload);
}
Uygulamamızı çalıştırıyoruz.
XSS_Sayfa1.aspx’de 1 adet textbox ve 1 adet buton bulunmakta
textbox’a standart olarak kullandığımız xss payloadını yazıp gönder butonuna basıyoruz.
Karşımıza bir hata çıkıyor ve xss payloadımız engelleniyor.
Ama biz kontrol koymadık nasıl yaptı bunu ?
ASP.NET platformunda geliştirilen yazılımlarda inputlara
yazılan ‘<’ işareti ile başlayıp ‘>’ işareti ile biten script tag’leri otomatik olarak varmı
yokmu diye kontrol edilir eğer varsa ekrana bu şekilde hata fırlatır. Bunu
ASP.NET otomatik olarak kontrol eder.
Hata sayfalarının kullanıcılara gösterilmesi uygulama açısından kritik bilgilerin gösterilebileceği anlamına gelebilir. Bu gibi hata sayfalarının engellenmesi gerekmektedir.
Birçok yazılımcı hata sayfalarını düzeltmek için internette bulduğu çözümü ne gibi sorunlara neden olacağını tahmin edemeyebilir. Hata sayfasının görüntülenmesini engellemek tek satır kod ile mümkündür.
Hata sayfasının çözümü olarak Web.config’e yazılacak kod aşağıdaki gibidir.
Hata sayfasının çözümü olarak Web.config’e yazılacak kod aşağıdaki gibidir.
<pages validateRequest="false"/>
Bu kodu yazdıktan sonra biraz önceki yaptığımız isteği
tekrar yapalım.
Sonuç olarak karşımıza hata sayfası çıkmadı ama yazdığımız
xss payloadı çalışmış oldu.
Web.config’de yapılan değişiklikler tüm uygulamayı kapsar, ancak bu kontrolü sadece belirli sayfalarda ve belirli inputlarda kapatmakta
mümkündür.
aspx sayfasının en üstünde bulunan Page Language ile başlayan satırın içine ValidateRequest="false"
yazılırsa validasyon kontrollerinin bu sayfada yapılmayacağı anlamına gelir,
yani diğer sayfalarda kontrol devam edecektir.
Aynı şekilde Hangi input için bu kontrolün yapılmasını istemiyorsak ValidateRequestMode="Disabled" yazarakda bu kontrolü o input için kapatmış oluruz.
Şuana kadar hatanın çözümü için yöntemlerden bahsettik,
hatanın üretilmesini engelledik ama XSS zafiyetini engelleyemedik tam bu sırada
Anti XSS kütüphanesi karşımıza çıkıyor ve bu kütüphane sayesinde XSS
zaafiyetinden de korunmuş oluyoruz.
Gerekli kütüphaneyi projemizde kullanacağımız sayfaya
ekliyoruz.
using System.Web.Security.AntiXss;
AntiXssEncoder sınıfındaki HtmlEncode özelliğini
kullanıyoruz.
Response.Write(AntiXssEncoder.HtmlEncode(AntiXSS.XSS_Class.XSSPayload,false));
Aynı isteği tekrar yaptığımızda sayfanın bize alert
üretmediğini görmüş olduk yazdığımız xss payloadını olduğu gibi bize gösterdi,
Yani XSS zafiyetini AntiXss kütüphanesi sayesinde önlemiş olduk.
Input Encode
Output Encode