Page.ViewStateUserKey

Page.ViewStateUserKey プロパティ

これの利用サンプルを調べると、ユーザ名またはセッションIDを入れるというような話が出てくる。

CSRF対策としてこれを利用することを考えた場合、単純なリンクであれば確かに少しは防止策になるかもしれない。ところがサイト内で同一セッションを利用しているページのどこかにXSSを生じるようなページがあった場合には、JavaScriptを組み合わせてユーザー名やセッションIDが抜いた状態からCSRFリンクを作って攻撃するということもありうる。

なので、ViewStateUserKeyにはやはり毎回ユニークなID(GUID)を割り当てるのがいい。ViewStateUserKey を使ってきっちり守りたい場面というのは、複数の画面に渡ったトランザクション画面であることが想定されるわけで、このトランザクションの中でのみ有効でユニークなIDを入れておけば、「トランザクションの部分だけきっちりレビューする」ことにより安全性を保てる。

そんなわけで、ViewStateUserKey を使いつつ Wizard または MultiView を利用し1ASPX内でトランザクション画面を遷移するようなカスタムコントロールを作ってしまおうかと思っているところ。(ついでに外部サービスへのアクセスは非同期で…)

サンプルコード: Default.aspx.cs の場合。ここに Wizard を貼り付けて実験してみた。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : Page
{
    protected override void OnInit(EventArgs e)
    {
        if (!IsPostBack)
        {
            string viewStateUserKey = Guid.NewGuid().ToString();
            Page.ViewStateUserKey = viewStateUserKey;
            Session["ViewStateUserKey"] = viewStateUserKey;
        }
        else
        {
            Page.ViewStateUserKey = (string) Session["ViewStateUserKey"];
        }
    }
}
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。