Asp.Net Web Güvenliği : XSS Attacks

XSS (Cross Site Scripting)

XSS pek önemsenmeyen fakat başınıza büyük sıkıntılar açabilecek bir açıktır.Genellikle querystring üzerinden veya site üzerinde yer alan inputlar üzerinden gerçekleştirilir.Sql Injection ve XSS birbirleriyle ilişkilidir. Herhangi birinde bir eksiklik var ise her ikisine açık doğurmuş oluruz.

Kısa bir örnek olarak, kullanıcı adı ve parola yer alan bir kullanıcı formunda XSS saldırıya ön planda tutmadan formu hazırladıysanız herhangi bir input değerine javascript kodu yazılabilir ve Sql Injection saldırısı denenebilir.Bakınız : Asp.Net Web Güvenliği : Sql Injection


XSS saldırılarından korunmak için başlıca yöntemler ;
  • Asp.Net RequestValidation
  • Output Encoding
  • Browser XSS Defence
  • ORM (Entity Framework , Hibernate , vb)

Asp.Net Request Validation

Mvc projelerimizde varsayılan olarak Action methoduna gönderilen değerlerin html veya script kodu içerip içermediğni Asp.Net bizim yerimize otomatik olarak denetliyor ve request atılmasını engelleyerek HttpRequestValidationException fırlatıyor. Bu native özellik genellikle düzgün bir şekilde çalışarak sitelerimizi korumayı başarıyor. Fakat bazı durumlarda özellikle html veya script kodu girişlerine izin vermek isteyebilirsiniz. Haber eklerken özellikle cms sistemlerinde.Bunun için manuel olarak validate işlemini Action bazında kapatmanız gerekir.Örnekler ;


Output Encoding

XSS güvenliği yaklaşımı sadece dışarıdan girilen verilerin önlemini almak değil var olan bir veriyi dışarıya açarken de dikkatli olmamızı şart koşar.Yani ; herhangi bir link , css kodu , database verisi , statik veriyi siteye basmadan önce encoding işleminden geçirmeliyiz. Neden diye sorarsanız bir şekilde XSS açığından yararlanarak database içeriğin enjekte edilen zararlı kod Outpu Encoding ile engellenebilir.

Output Encoding yöntemini Mvc projelerimize aşağıdaki ana yöntemler ile uygulayabiliriz ;

  1. Encoding Output Values in Code
    HttpUtility.UrlEncode(str) ve HttpUtility.HtmlEncode(str) methodları yardımıyla döndürülecek veriyi back end tarafında encode yapabiliriz.
  2. AntiXssEncoder (Anti XSS Framework)
    Tüm site genelinde Encode işlemlerini AntiXSSEncoder kütüphanesi üzerinden gerçekleşmesini sağlayabilirsiniz.
En garanti yöntemler yukarıdaki yazdığım başlıklar.Gelin bu yöntemleri kod üzerinden görelim ; 


Browser XSS Defence

Asp.net Mvc projelerimizde web.config dosyasından küçük bir düzenleme yaparak istek yapan tarayıcının native Xss Defence özelliğini açmasını zorlayabiliriz. Genellikle tutarsız çalışan bir yöntem çünkü farklı tarayıcılar ve bu tarayıcılar her sayfayı farklı yorumlayabilirler.Her sitede her tarayıcı her durum için aynı tepkiyi vermeyecektir. Çok güvenli değil fakat kullanılabilir.

Web.config dosyasına şöyle bir düzenleme ile Browser XSS native defence özelliğini aktif edebiliriz ;

ORM

Son olarak database işlemlerimiz için genellikle ORM araçlarını kullanmaya dikkat edin.Ben Entity Framework ile çalışıyorum.Sql Injetion gibi saldırıları büyük ölçüde minimize edebilirsiniz.

Yorumlar

Bu blogdaki popüler yayınlar

Brackets Eklentileri

Asp.Net Mvc Bundle Kullanımı

Asp.Net Tinymce Kurulum ve Image Browser