misc.log

日常茶飯事とお仕事と

ASP.NETでやりとりされるViewstateの内容を読み解いてみたいがうまくいかない(2)

先日の続き。ASP.NETなどでのページ遷移の際にくっつく情報「Viewstate」の中身をのぞき見してみたいという課題の続き。

環境はASP.NET + .NET Framework 4.5、サーバーはWindows Server 2012にIIS8.0という状況で、簡単なASP.NETのページを作り、テキストボックスに入れられたメッセージをボタン押下でビューステートに突っ込んでみます。

先日は、.aspxファイルのPageディレクティブに「ViewStateEncryptionMode="Never"」を指定し、暗号化を行わない設定にしたのち、LOS Formatterでデコードしてみたのですが……駄目でした。シリアライズできないというエラーがでて失敗。

で、Pageディレクティブに「EnableViewStateMac="False"」を追加するといいよ、とのコメントをいただいたので早速試してみます。前回のトライはこちら

ASP.NETでやりとりされるViewstateの内容を読み解いてみたいがうまくいかない
http://www.backyrd.net/entry/20131026/1382777890

Default.aspxの先頭に追記

とりあえず冒頭ページの先頭行をこんな感じに。

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ASPNET_Lesson1._Default" ViewStateEncryptionMode="Never" EnableViewStateMac="false" %>

そのでもってそのファイルをサーバーに置いて、ブラウザからアクセス。

ビューステートの文字列を抜き取る

Chromeでページを開いてF12を押し、データをのぞき見します。作ったページ上では、テキストボックスに入れた文字列を、ボタン押下で「MyName」というキーをつけてビューステートに格納しています。今回、「ASP.NETのビューステートを覗いてみます」という文字列を格納してみました。

f:id:frontline:20131031005450j:plain

「__VIEWSTATE」の項目にある文字列をコピーして、LOS Formatter(System.Web.UI.LosFormatter)を使ってデシリアライズしてみます……

f:id:frontline:20131031003700j:plain

さて、得られたObject型のデータ、一体何物なのかというと……クイックウォッチで見てみると「System.Web.UI.Pair」のようです。これにキャストしてみましょうか……。

あれ?入ってるのは「anti-csrf token」とラベル付けされた文字列の羅列……。んでもって、再度ボタンを押すと……

f:id:frontline:20131031012030j:plain

あ、出てきた……。なるほど。んでもって今回追加した「EnableViewStateMac」と、1回目のポストで流れたデータに入っていた「Anti-CSRF token」については後日調べます*1。今日は時間切れ。

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

*1:Anti-CRSF: 対クロスサイトリクエストフォージェリー、というセキュリティ関連機能のためのものだとおもうのですが、詳しく説明できるほど知識が無いのでまたいずれ。