C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■102844 / 1階層)  無効なviewstateのエラーについて 
□投稿者/ WebSurfer (2873回)-(2024/01/15(Mon) 16:20:41)
No102840 (スペックル さん) に返信

> クロスサイト・リクエスト・フォージェリの対応として、
> Webフォームのマスターページのページ初期化イベントにて、
> ViewStateUserKeyにセッションIDを割り当てております。

質問に提供されている情報ではそこ以外に怪しいところは見当たりません。(質問に
書いてないところかもしれませんが、見えないので分かりません)

たぶん、マスターページで、

void Page_Init(object sender, EventArgs e)
{
ViewStateUserKey = Session.SessionID;
}

というようなコードを書いていると思いますが、Session.SessionID がポストバック前後
で異なると ViewStateException がスローされます。

Session.SessionID をポストバック前後で同じにするためには、最初の要求の応答にセッ
ション cookie を含めて送信し、以降はクライアントからサーバーに要求を送る都度その
cookie を送信する必要があります。

SessionState 情報を格納しない場合(Session["Data"] = xxxx; というようなコードが
存在しない場合)もしくは Global.asax に Session_Start ハンドラがない場合、サー
バーはセッション Cookie を発行しないとことに注意してください。そこは問題ないで
すよね?

上の Page_Init コードで、SessionID は SessionStateModule が生成しますが、クライ
アントから Cookie が送られてこなければ SessionStateModule が生成する SessionID
の値はリクエストのたび異なります。

結果、ViewStateException がスローされサーバーエラーとなります。

質問者さんのケースでは、

> 発生する画面、タイミングなどが様々で、

とのことなので、その画面・タイミングで、何らかの事情でクライアントから cookie が
送られないということではなかろうかと思います。

何故そう言うことになるのかは第三者には分かりません。質問者さんの方で調べてもらう
ほかないと思います。

CSRF 対策に SessionID を使うのはあっさり諦めて、Visual Studio 2022 のテンプレート
で作る Web アプリケーションプロジェクトのマスターページに実装されているようにする
という手もあると思います。詳しくは以下の記事を見てください。

ASP.NET の CSRF 対策
http://surferonwww.info/BlogEngine/post/2023/05/02/countermeasures-against-csrf-in-aspnet-web-application.aspx
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←無効なviewstateのエラーについて  /スペックル →Re[2]: 無効なviewstateのエラーについて  /スペックル
→Re[2]: 無効なviewstateのエラーについて  /スペックル
 
上記関連ツリー

無効なviewstateのエラーについて  / スペックル (24/01/15(Mon) 14:38) #102840
Re[1]: 無効なviewstateのエラーについて  / WebSurfer (24/01/15(Mon) 15:02) #102842
│└ Re[2]: 無効なviewstateのエラーについて  / スペックル (24/01/15(Mon) 15:15) #102843
無効なviewstateのエラーについて  / WebSurfer (24/01/15(Mon) 16:20) #102844 ←Now
  ├ Re[2]: 無効なviewstateのエラーについて  / スペックル (24/01/16(Tue) 13:17) #102856
  └ Re[2]: 無効なviewstateのエラーについて  / スペックル (24/01/17(Wed) 19:15) #102862
    └ Re[3]: 無効なviewstateのエラーについて  / WebSurfer (24/01/17(Wed) 19:51) #102863
      └ Re[4]: 無効なviewstateのエラーについて  / スペックル (24/01/19(Fri) 10:02) #102871 解決済み
        └ Re[5]: 無効なviewstateのエラーについて  / WebSurfer (24/01/19(Fri) 10:49) #102872

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信