1

これは私のテスト構成によるものだと思いますが、皆さんの考えをお聞きしたいと思います. 私は簡単なテストプロジェクトで遊んでいました。シンプルなフォーム認証ページと注文ページ (2 つのフィールドと「注文」を表示するリスト) がありました。注文ページは、パラメーターを取得するときに Request.Form[] を使用して、入力が GET 操作として入るのを防ぐように設定されていました。

Page_Init で ViewStateUserKey を設定し、EnableViewStateMac を明示的に true に設定します (デフォルトは true ですが)。

次に、2 つのフィールド (製品と数量) の値を設定する注文ページへのフォーム投稿を行う .HTM を作成しました。フォーム送信の一部としてビューステートをわざわざ作成しなかったことに注意してください。ブラウザの実際のページでソースを表示し、フォームフィールド以外をすべて切り取り、JavaScript を追加してフィールド値を設定し、form.submit() を実行しました。

テスト プロジェクトにログインし、.HTM を開きました。.HTM はフォームを正常に送信し、注文ページを更新すると、偽の注文が表示されました。

ViewStateUserKey がこれを防止しなかったのはなぜですか? まさにそのタイプの攻撃をブロックすることになっていませんか?この例では、ビューステートを改ざんしませんでした。通常のフォームの投稿を行うページを作成しただけなので、ViewStateUserKey は、ViewStateの改ざんから保護するためだけに存在します (これはまったく価値がないと思います。または、両方のページが生きているため、これは機能しています)。同じ物理マシン上で?

4

1 に答える 1

1

テスト ページに元のビューステート フィールドを含めましたか? 特定のユーザーの有効なビューステートをコピーし、そのユーザーとして送信した場合、はい、それが機能することが期待されます。

ViewStateUserKey 機能は、自分のユーザーから作成された ViewState を取得し、別のユーザーが誤って作成した送信でそれを使用することを防止するだけです。

于 2011-05-08T14:13:32.827 に答える