「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Webアプリケーション脆弱性対策]] *目次 [#wd4a0d41] #contents *概要 [#ia074187] [[ASP.NET]]でのCSRF(XSRF)対策方針について纏める。 *XSRF(CSRF)とは? [#aa0d7174] XSRF(CSRF)は、あるサイトを操作している時に、~ (従って、ログインも、セッションも存在している状態で)~ 操作者が攻撃者のリンクを踏むと、意図せぬ操作を実行されてしまう。 そういう類の攻撃で方法です(「[[ぼくはまちちゃん!>https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%AA#.E3.80.8C.E3.81.BC.E3.81.8F.E3.81.AF.E3.81.BE.E3.81.A1.E3.81.A1.E3.82.83.E3.82.93.E3.80.8D_.E9.A8.92.E5.8B.95]]」が有名)。 *対応方針の材料 [#a119b84a] **[[ASP.NET Web Forms]] [#iffca9fe] ***POST [#x5f84c6b] [[ViewState>ASP.NET ViewState]] の ViewStateUserKey にセッション ID を割り当てる方法がメジャー。 ***GET [#k5635c95] GETでは攻撃しやすいのでQueryStringで予期せぬCRUD等の操作がされないように作る。 **[[ASP.NET MVC]] [#b06cdc95] ***POST [#ec6b7116] ValidateAntiForgeryToken属性とHtml.AntiForgeryTokenヘルパを使う。 ***GET [#q106a76d] GETでは攻撃しやすいのでQueryStringで予期せぬCRUD等の操作がされないように作る。 **[[WebAPI]] [#k02fa149] -主に、業務系SPAの裏のWebAPIは同様に対応が必要になる。 -Cookieに設定したX-CSRF-TOKENを、HTTPヘッダに設定する方式が一般的。 -ソレ以外のWebAPIは、client_id, client_secretの基本認証やbearer tokenを使用。 -参考 --ASP.NET Core で防ぐクロスサイト リクエスト フォージェリ (XSRF または CSRF) 攻撃 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/aspnet/core/security/anti-request-forgery *対応方針の案 [#n243165a] 案件依存だが・・・。 **[[ASP.NET Web Forms]] [#w10d9b44] [[上記>#iffca9fe]]から選択。 **[[ASP.NET MVC]] [#h8202df2] [[上記>#b06cdc95]]から選択。 **[[WebAPI]] [#lfe3f4c3] [[上記>#k02fa149]]から選択。 **判断材料 [#db46d410] 案件毎にCSRF(XSRF)対策のポリシーを持って対応する必要がある。 -GETが通れば即、warningになるので診断ツールの誤検知が多い。 -CSRF(XSRF)になっても実際に問題は起きるかどうかはアプリの作りによる。 ***攻撃対象 [#p4e64803] 一般的に、足がつかない、 -匿名アクセス可能なサイトか、 -フリーメールサービスのアドレスでサインアップ可能なサイト が多いと考える。 ***攻撃者 [#z2bcbf96] -上記のような匿名アクセスが可能なサイトの場合、誰でも攻撃可能。 -会員制サイトの場合、そのサイトを利用可能な会員でしないと、攻撃方法を見い出せない。 ***攻撃方法 [#s35e1263] 操作中にリンクを踏む必要があるので、 -対象システム内にリンクの書き込みを行う事が多い。 -しかし、会員制の場合、通常、書き込み者が解れば足がつくので攻撃しない。 対象システム外に書き込みを行う場合、 -そもそもリンクを踏む可能性が低い。 -会員制サイトを攻撃する場合、会員である必要がある。 GET要求を投げるための偽装テクニックがある。 -0サイズのiframeタグなどを利用する。 -0サイズのimgタグのsrc属性に書く *参考 [#a8f3a2cf] -クロスサイト・リクエストフォージェリ(CSRF)対策(ASP.NET,C#,VB.NET編) | Webセキュリティの小部屋~ https://www.websec-room.com/2013/03/06/473 -ASP.NET Core MVC で追加されたAutoValidateAntiforgeryToken属性が便利 - 時が癒す~ http://mrgchr.hatenablog.com/entry/2016/11/16/000000 ---- Tags: [[:テスト]]