fc2ブログ

記事一覧

クロスサイトリクエストフォージェリ (CSRF) の対策と確認方法 | asp.net


今回は asp.net において クロスサイトリクエストフォージェリ (cross-site request forgeries / CSRF) への対策方法についてご紹介いたします。
クロスサイトスクリプティング (cross-site scripting / XSS) となんとなく似ているワードですね。(ちなみに XSS ではスタイルシートのCSSと紛らわしいので、Cross=X と変更されたという逸話があります。)
尚、XSS では任意の JavaScript を埋め込みできてしまうことにより閲覧したユーザーに対してスクリプトが実行されてしまう危険性を含むことでしたが、CSRF ではサーバーがリクエストを十分に検証していない場合に、攻撃者が意図しないリクエストを送信することによって、正常なリクエストとして処理を実行できてしまう危険性の事を言います。

 
aspnet_csrf_01.png



前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.対応方法

(対策1)
ViewState にセッションIDを埋め込みます。
以下のように Page の Init イベントにセッションIDをビューステートに埋め込みます。マイクロソフト推奨とのことですが、完全ではありません。マスターページに埋め込むと全てのページに対して CSRF の対策が実装できるのではないでしょうか。
※下記サンプルコードは WebForm に対しての実装方法です。asp.net MVC などは別途実装方法があるようです。

Public Class Site
Inherits System.Web.UI.MasterPage

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

'CSRF対策
Me.Page.ViewStateUserKey = Session.SessionID

End Sub

End Class


(対策2)
フォーム認証のパスワードを確認する画面を表示します。
決済時など何か登録・実行を促す際に、パスワードを求める画面を表示することにより不正なリクエストを排除することができます。Yahoo や Google などのアカウントはアカウントに関する情報を変更するページでは必ずログイン画面が表示されますね。



2.検証方法

大まかに説明しますとセッションハイジャックを行い、POST を実行すると以下のようなエラー出力を確認できます。ViewState に埋め込んだセッションIDをサーバー側で検査した結果が異なることからエラーが発生します。

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

※セッションハイジャックの方法は以前の記事「セッションハイジャック対策がされているか確認する方法」をご確認ください。


以下、検証手順詳細を記載ます。
(1)まずは正常なログインを行ったユーザーのセッションIDをコピーします。

aspnet_csrf_02.png


(2)別のセッション(別のブラウザでも新しいタブで開いた別のセッションでも構いません。)でログインします。

(3)別セッションのログイン後にセッションIDを(1)でコピーしたセッションIDに置き換えます。(ここまではセッションハイジャックと同じ手順です。)

aspnet_csrf_03.png


(4)WEBフォームに用意したボタン(SubmitでPOSTできるものなら何でも)を押下します。

(5)以下のように asp.net のエラーが出力されます。

aspnet_csrf_04.png

ViewState にセッションIDを埋め込みしていない場合は、送信した POST がサーバー側で正常に受付され、セキュリティリスクとなります。






最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。