先日の続き。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のビューステートを覗いてみます」という文字列を格納してみました。
「__VIEWSTATE」の項目にある文字列をコピーして、LOS Formatter(System.Web.UI.LosFormatter)を使ってデシリアライズしてみます……
さて、得られたObject型のデータ、一体何物なのかというと……クイックウォッチで見てみると「System.Web.UI.Pair」のようです。これにキャストしてみましょうか……。
あれ?入ってるのは「anti-csrf token」とラベル付けされた文字列の羅列……。んでもって、再度ボタンを押すと……
あ、出てきた……。なるほど。んでもって今回追加した「EnableViewStateMac」と、1回目のポストで流れたデータに入っていた「Anti-CSRF token」については後日調べます*1。今日は時間切れ。
「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか
- 作者: 小森裕介
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/10
- メディア: 大型本
- 購入: 57人 クリック: 1,242回
- この商品を含むブログ (35件) を見る
*1:Anti-CRSF: 対クロスサイトリクエストフォージェリー、というセキュリティ関連機能のためのものだとおもうのですが、詳しく説明できるほど知識が無いのでまたいずれ。