Son Haberler
Anasayfa / Asp.NET / ViewState’in Kod Oluşturma Yapısı ve ViewState Decode

ViewState’in Kod Oluşturma Yapısı ve ViewState Decode

“ViewState nedir?” gibi bir girişmde bulunmayacağım; çünkü ister ASP.NET öğrenen biri olun, ister çılgınca ASP.NET uygulamaları yazan biri olun ViewState’i bilmiyor gibi bir durum söz konusu olamaz diye düşünüyorum. Peki sunucunun (server) bize HTML olarak gönderdiği cevapların (response) içinde de gördüğümüz ve HTML çıktısında “__VIEWSTATE” etiketi ile başlayan ASP.NET kodlarında “EnableViewState” ile kontrol edebildiğimiz ve sayfa içeriğine, tutulması gereken bilgilere ve ASP.NET kontrollerine göre uzun kodlar üreten bu kullanışlı ve sevimli teknolojiyi biraz kurcalayalım.

<form method="post" action="Contact.aspx" id="ctl00">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTEyOTg3Nzg1MTkPZBYCAgMPZBYC
AggPD2QWAh4Kb25rZXlwcmVzcwUdamF2YXNjcmlwdDpjaGVja0NoYXJhY2t0ZXIoKTtkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9z
dEJhY2tLZXlfXxYBBQhidG5HaXJpc0yIkrTxWm6mXhGEFwOoe733Ofcx" />
</div>

Yukarıdaki kod bloğunda 5.satırda sunucu tarafından oluşturulmuş örnek bir ViewState kodu görmekteyiz. Bilindiği üzere server bu kod içerisinde kendince bilgiler tutuyor.

Base64 Kodlama Şeması İle Tanışalım

ViewState kodları sunucu tarafından Base64 şeması ile kodlanır. Sunucu Base64 şemasına göre oluşturduğu kodları PostBack durumunda tekrar yakalayarak kullanmak için decoding yapar yani çözümler.

Base64: ASCII karakterlerini kullanarak, binary dataların (ikili veriler) ortamlar arasında veri taşıma ve saklama işlemleri yapılabilen bir kodlama şemasıdır. Base64 ile 8 bitlik verileri 64 bitlik kodlar haline getirilip şifrelenebilir. Ayrıca e-posta sistemlerinde kullanılan MIME – Multipurpose Internet Mail Extensions Türkçe anlamıyla “Çok Amaçlı İnternet Posta Eklentileri” standartlarındaki sistemlerde Base64 kullanır.

Base64 yöntemiyle oluşturulan kodların uzunluğu 4’ün katları şeklindedir. Dördün katını oluşturmuyorsa, dördün katı olana kadar kodların sonuna “=” karakteri eklenir.

Örneğin : “Ahmet” adının Base64 ile şifrelendiğinde karşılığı “QWhtZXQ=” olur. Saydığımız zaman sondaki “=” karakteri uzunluğu 8 haneye yani dördün katına tamamlar.

ViewState Decode İşlemine Başlayalım

ViewState’in Base64 kullandığını artık biliyoruz o zaman şifreyi tekrar decoding (çözümleme) yapalım. Decoding işlemini yapan fazlaca uygulama ve websitesi olmasına rağmen ben http://ignatu.co.uk/ViewStateDecoder.aspx adresini kullanacağım. Diğerleri sadece kodu decode yaparken bu adreste decoding işlemini ViewState yapısına uygun olarak gösteriyor. Başka bir sebebi yok.

Yukarıdaki kod bloğunda örnek verdiğim ViewState kodunu kullanarak yaptığımız decode işlemi sonucuda aşağıdaki gibi bir sonuç çıkacaktır. Decode işlemi yaparken “Complete object hierarchy” seçeneğini seçmeyi unutmayın.

Pair
Pair
-1298778519
Pair
ArrayList
3
Pair
ArrayList
8
Pair
Pair
ArrayList
System.Web.UI.IndexedString
javascript:checkCharackter();
System.Collections.Specialized.HybridDictionary
Base64 şifreleme şemasının nasıl çalıştığını detaylarıyla anlatan çok fazla kaynak olması sebebiyle detaylara girmek istemedim. Asıl değinmek istediğimViewState kodlarının decode işlemiydi bunu biz ASP.NET geliştiricilerinin bilmesi gereken bir genel kültür konusu gözüyle ele aldım.