misc.log

日常茶飯事とお仕事と

Viewstateが使っているシリアライザー(LOS/Limited Object Serialization Formatter)

http://www.backyrd.net/entry/20131026/1382777890 の続きです。


先ほどのViewstateに関する調べ物の過程で、ASP.NETがViewstate情報の生成と解読に用いているのはLOS Formatter(Limited Object Serialization Formatter)だという話を見つけました。

ビューステートのセキュリティ(MSDNマガジン)
http://msdn.microsoft.com/ja-jp/magazine/ff797918.aspx

LOSフォーマッターは、System.Web.UI名前空間に用意されているクラスで、おそらくですが、ビューステートに保存可能なデータをシリアライズ(クラスなどの情報をそのままXMLなどの文字情報に変換する処理)し、さらにBase64エンコードしてしまう機能を持っていると思われます。

Limited Objectと名付けられている理由は、

How are objects serialized/deserialized into viewstate?(ASP.NET Forums)
http://forums.asp.net/t/1320464.aspx

で話題にあがっているように、数ある.NETの型のうち、ビューステートに保存可能なものに限定、特化しているためなのでしょう。

使い方

こんな感じのコードで。得られる結果はとりあえずObject型で受けておくのがよさげ。

System.Web.UI.LosFormatter formatter = new System.Web.UI.LosFormatter();
object result = formatter.Deserialize(TextLOSDecode.Text);

ただ、これでも先ほどの自作サイトではき出されたビューステートは、こんなエラー("シリアル化されたデータは無効です。")が出て復号できませんでした……なんでだよw 非常に「すっきりしません」。

f:id:frontline:20131026204106j:plain

もしかして.NETのバージョンとかによって微妙に違っていたりするのかな。