Asp.net 2.0 ile .aspx sayfalarına “Event Validation” diye bir kavram gelmişti. .NET 1.1’den 2.0’a geçerken aşağıdaki hatayı eminim bir çok kişi almıştır.

Invalid postback or callback argument. Event validation is enabled using <pages enableeventvalidation=”true” /> in configuration or <%@ page enableeventvalidation=”true” %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Bu hata aslında bizi bazı şeyler konusunda uyaran güzel bir hata. Daha doğrusu hata değil, uyarı…Bu bazı şeyler de tahmin edebileceğiniz gibi “cross-site scripting” ya da diğer adı ile XSS saldırıları oluyor. Asp.Net 2.0’da nasıl oluyor bu önce bunu hatırlayalım…Şimdi bir tane “DropDownList” kontrolümüz olduğunu düşünelim. Sunucu tarafında buna 5 tane eleman eklediğimizi farz edelim.(Item1,Item2,Item3,Item4,Item5)

Bu kontrol sayfada “render” olurken, eğer sayfa bazında “Event Validation” aktif ise, sayfaya bu kontrolün olabilecek tüm değerleri, kontrolün “UniqueID”si ile hash’lenir ve kayıt olur. Sayfaya sağ tıklayıp, kaynağı görüntüle dediğimizde “EventValidation=\eqweuıqrwjhbbdjhadfadgha………….” şeklinde karmakarışık bir şey görürüz. İşte bunlar bu hash’lenmiş kayıtlar. Örneğimizdeki 5 eleman hash’lenip bu şekilde kayıt olur. PostBack işleminde de bu hash ile PostBack değerleri XOR’lanır…Uygun bir durum olmadığında yukarıdaki uyarıyı(hatayı) alırız. Bu sayede sunucu tarafına, istemci tarafından bilinmeyen ya da beklenmeyen bir şey “POST” edilemez. Asp.Net 2.0’da bu şekildeydi…Bunu düzeltmek için sayfa bazında ya “Event Validation”ı kapatıyorduk, ya da kodlarımızı tekrar gözden geçiriyorduk.

Asp.Net 4.0’da işler biraz daha değişiyor. Eskiden sadece sayfa başına yapılan bu “Validation” işlemi, Asp.Net 4.0 ile beraber tüm “Request”lerde yapılıyor ve kavram “Request Validation” kavramına dönüşüyor. Ayrıca eski versiyonlarda sadece *.aspx sayfalarında yapılan bu kontrol, yeni versiyon ile tüm “resource”lar da yapılıyor. Yani diğer web servis çağırımlarında, başka dosya çağırımlarında…

Bu durum eski versiyonlardan yeni versiyonlara geçerken, sinir bozucu hatalar ya da uyarılar alabilirsiniz. Doğru olan, yapılan ya da yapılacak olan “request”leri gözden geçirmekte fayda var. Ama biraz daha az uğraştıran ve eski versiyonlardaki yaklaşımı kullanmak istersekte bunu kolayca yapabiliyoruz. web.config dosyasına aşağıdaki gibi bir ekleme yaptığımızda Asp.Net 4.0’da, Asp.Net 2.0’da ki “validation” kavramını kullanabiliyor olacağız.

<httpRuntime requestValidationMode=”2.0″ />

Bir sonraki yazı da görüşmek üzere…(: