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 非常に「すっきりしません」。
もしかして.NETのバージョンとかによって微妙に違っていたりするのかな。
.NETエンタープライズWEBアプリケーション開発技術大全VOL.2 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)
- 作者: 赤間信幸
- 出版社/メーカー: 日経BP社
- 発売日: 2004/06/05
- メディア: 単行本
- 購入: 4人 クリック: 46回
- この商品を含むブログ (23件) を見る