Skip to content

MS_ASPNETViewState

nishi_74322014 edited this page Aug 12, 2026 · 1 revision

ASP.NET ViewState

概要

Hidden を使用した状態保持の仕組み。

詳細については、ASP.NETの状態管理方式
「ViewStateとは」以降を参照。

移行メモ(誤字): 元ページの本文は「Hidden を仕様した状態保持の仕組み」と
なっているが、「使用した」の誤記である。

移行メモ(元ページの状態): 元ページは目次・概要・参照リンクのみの
スタブ ページであり、実体はASP.NETの状態管理方式側に
記述されている。移行に際しては、ページの位置付けを保ったまま、
単独で読んでも要点が分かる程度の補記を以下に追加した。

詳細

位置付け

ASP.NET Web Forms における状態管理技術のうち、ViewState は
サーバ ステートレス(サーバ側にデータを置かない)な方式に分類される。

観点 内容
格納場所 HTML の Hidden フィールド __VIEWSTATE(クライアント側)
スコープ 同一ページへのポストバックの間のみ
サーバ資源 消費しない(負荷分散構成でも状態の共有が不要)
通信量 ページ サイズが増加する(大きな値を入れると顕著)
実体 オブジェクトをシリアライズし Base64 エンコードした文字列

Web ガーデン / Web ファーム構成でもサーバ間で状態を共有する必要がない一方、
リクエスト・レスポンスの度に往復するため、通信量とのトレードオフになる。

主な用途

  1. アプリケーション基盤処理(ASP.NET の内部利用)
    イベント ドリブンのプログラミング モデルを実現するため、
    Web コントロールの表示状態が ViewState に保存される。
    これにより、ポストバック時に前回の表示状態が復元され、
    変更イベント(TextChanged など)の発火判定が可能になる。

  2. アプリケーションからの利用
    ViewState["key"] によって、同一ページ内で持ち回りたい値を保存できる。
    Session の代替として使えるが、Session と異なり
    ページを跨いだ持ち回りはできない

制御用の属性

属性 内容
EnableViewState ViewState の有効/無効
ViewStateMode Enabled / Disabled / Inherit。オプトイン的な制御が可能
EnableViewStateMac 署名(改ざん検証)の有無
ViewStateEncryptionMode 暗号化の有無(Always / Auto / Never
ViewStateUserKey ユーザ単位のキーを混ぜ、ワンクリック攻撃(CSRF)を抑止

補足(セキュリティ:EnableViewStateMac="false" は使用できない):
ViewState は暗号化ではなく Base64 エンコードであるため、
既定のままでは内容を復元できる(機密情報を入れてはならない)。
また、EnableViewStateMac="false" は MS14-059 の修正および
.NET Framework 4.5.2 以降で無効化できなくなっており
指定しても常に MAC 検証が行われる。
併せて、machineKey が漏洩すると細工した ViewState による
リモート コード実行に繋がるため、machineKey
構成ファイルに直書きせず秘密として扱うこと。

補足(最新化): ViewState は ASP.NET Web Forms 固有の機構であり、
ASP.NET Core(MVC / Razor Pages / Blazor)には存在しない
ASP.NET Core へ移行する場合、ページ内の状態の持ち回りは
フォーム フィールド・TempData・クエリ文字列・
ASP.NET Coreのデータ保護(MS_ASPNETCoreDataProtection.md)を利用した
保護付きトークンなどで代替する。

参考


Tags: 移行, .NET開発, ASP.NET, ASP.NET Web Forms

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally