ASP.NET の CSRF 対策は簡単で、Web フォームの初期化の際に ViewState の ViewStateUserKey にセッション ID を割り当てるだけで対応できます。
・C#
protected override void OnInit(EventArgs e) { base.OnInit(e); ViewStateUserKey = Session.SessionID; }
・VB.NET
Protected Overrides Sub OnInit(e As EventArgs) MyBase.OnInit(e) ViewStateUserKey = Session.SessionID End Sub
この状態で CSRF の攻撃があると以下のようなエラー画面が表示され、攻撃をブロックします。
但し、この方法はセッションが既に開始されていることを前提としているので、セッションが開始されていない場合は上記エラーが表示されます。セッションが開始されているか分からない場合は、以下のように強制的にセッションを開始することでエラーを回避出来ます。
・C#
protected override void OnInit(EventArgs e) { base.OnInit(e); if (Session.IsNewSession) { Session["dummy"] = null; } ViewStateUserKey = Session.SessionID; }
・VB.NET
Protected Overrides Sub OnInit(e As EventArgs) MyBase.OnInit(e) If (Session.IsNewSession) Then Session("dummy") = vbNull End If ViewStateUserKey = Session.SessionID End Sub
■参考サイト
参考
Webアプリケーションセキュリティに関する記事は、以下のページにまとまっています。ぜひご確認ください。
コメント