-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ASPNETViewState
- 戻る(ASP.NETの状態管理方式)
- ASP.NET ViewState
- ASP.NET Session
Hidden を使用した状態保持の仕組み。
詳細については、ASP.NETの状態管理方式の
「ViewStateとは」以降を参照。
移行メモ(誤字): 元ページの本文は「Hidden を仕様した状態保持の仕組み」と
なっているが、「使用した」の誤記である。
移行メモ(元ページの状態): 元ページは目次・概要・参照リンクのみの
スタブ ページであり、実体はASP.NETの状態管理方式側に
記述されている。移行に際しては、ページの位置付けを保ったまま、
単独で読んでも要点が分かる程度の補記を以下に追加した。
ASP.NET Web Forms における状態管理技術のうち、ViewState は
サーバ ステートレス(サーバ側にデータを置かない)な方式に分類される。
| 観点 | 内容 |
|---|---|
| 格納場所 | HTML の Hidden フィールド __VIEWSTATE(クライアント側) |
| スコープ | 同一ページへのポストバックの間のみ |
| サーバ資源 | 消費しない(負荷分散構成でも状態の共有が不要) |
| 通信量 | ページ サイズが増加する(大きな値を入れると顕著) |
| 実体 | オブジェクトをシリアライズし Base64 エンコードした文字列 |
Web ガーデン / Web ファーム構成でもサーバ間で状態を共有する必要がない一方、
リクエスト・レスポンスの度に往復するため、通信量とのトレードオフになる。
-
アプリケーション基盤処理(ASP.NET の内部利用)
イベント ドリブンのプログラミング モデルを実現するため、
Web コントロールの表示状態が ViewState に保存される。
これにより、ポストバック時に前回の表示状態が復元され、
変更イベント(TextChangedなど)の発火判定が可能になる。 -
アプリケーションからの利用
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)を利用した
保護付きトークンなどで代替する。
- ASP.NETの状態管理方式
- ASP.NET Session
- ASP.NET ビューステートの概要 | Microsoft Learn
https://learn.microsoft.com/ja-jp/previous-versions/aspnet/bb386448(v=vs.100)
Tags: 移行, .NET開発, ASP.NET, ASP.NET Web Forms
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。