7

質問

ASP および ASP.NET Web アプリケーションは、フォームで VIEWSTATE という値を使用します。私が理解していることから、これは、Web サーバーへのリクエスト間でクライアント上のある種の状態を保持するために使用されます。

私は ASP または ASP.NET を使用したことがなく、次の 2 つの質問 (およびいくつかのサブ質問) について助けが必要です。

1) フォームの VIEWSTATE をプログラムでスプーフィング/構築することは可能ですか? 明確化: プログラムはフォームを見て、そこから base64 でエンコードされた VIEWSTATE 値の内容を構築できますか?

1 a) それとも、常にそのままにしておくことができますか?

1 b) 特定のフォームの古い VIEWSTATE を、後で同じフォームを呼び出すときに再利用できますか?それともうまくいった場合は運がいいだけでしょうか?

2) http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic12から、VIEWSTATE がスプーフィングから保護されるようにセキュリティを有効にできることを収集します。VIEWSTATE がそのような方法で保護されていることをプログラムが検出することは可能ですか?

2 a) EVENTVALIDATION 値の発生と安全な VIEWSTATE の間に 1 対 1 のマッピングがありますか?

1) と 2) について、もしそうなら、どうやってそれを行うかについてのヒントをいただけますか? 2) については、値を base64 でデコードし、暗号化されていない VIEWSTATE で常に検出される文字列を検索できると考えています。"初め:"?他の何か?

バックグラウンド

いわゆる CSRF 脆弱性を検出して悪用するための小さなツールを作成しました。私はそれを使用して、影響を受けるサイトの所有者に送信するそのような脆弱性の概念の証明を迅速に作成します。これらのフォームに VIEWSTATE が含まれていることがよくありますが、これらが安全かどうかはわかりません。

編集 1:質問 1 をいくらか明確にしました。

編集 2:イタリック体のテキストを追加しました。

4

1 に答える 1

4

フォームのVIEWSTATEをプログラムでスプーフィング/構築することは可能ですか?

もちろん。これは、Base64でエンコードされた値です。現在、ASP.NET 2.0以降、ビューステートをマシンキーで暗号化できるオプションがありますが、これはオプトイン機能です。一般的に、そもそもビューステートにプライベートなものを置きたくないでしょう。

それとも、常に省略できますか?

ASP.NETの配管の一部にはViewStateが必要ですが、ASP.NETサーバーコントロールを引き続き使用する場合は、完全にオフにするのはかなり困難です。

特定のフォームの古いVIEWSTATEを後で同じフォームを呼び出すときに再利用できますか、それともそれが機能した場合は幸運ですか?

これはリプレイアタックと呼ばれます

はい、可能です。これはそれを示すブログ投稿です。

EVENTVALIDATION値の発生と安全なVIEWSTATEの間に1対1のマッピングがありますか?

あまり。イベント検証は基本的に、クライアント側のイベントがサーバーで発生した可能性のある「可能性のある」イベントと一致することを確認するために使用されます。__EVENTTARGETこれは主に、のような隠された入力が改ざんされていないことを保護および保証します。

于 2012-06-18T20:17:12.167 に答える