CS.CSRF.VALIDATE

「POST リクエストデータアクセス」の検証は行われていません

クロスサイトリクエストフォージェリ (CSRF) の防止は、普遍的な解決策がない複雑な問題です。CSRF の脆弱性が発生する可能性を減らす 1 つの方法は、要求ごとにトークンを返すようにブラウザーに要求する、偽造防止トークンを使用することです。ASP.NET WebForm アプリケーションでは、Microsoft の AntiForgery.Validate() メソッドまたは同様のカスタムメソッドを使用することで、CSRF 検証を行うことができます。

CS.CSRF.VALIDATE チェッカーは、MyTextbox.Text や Request.Form["id"] などのプロパティからの戻り値が、AntiForgery.Validate() メソッドによって最初に検証されることなく使用されているインスタンスにフラグを立てます。

脆弱性とリスク

クロスサイトリクエストフォージェリ (XSRF または CSRF とも呼ばれる) は、Web でホストされているアプリに対する攻撃であり、悪意のある Web アプリが、クライアントブラウザとそのブラウザを信頼する Web アプリとの間の相互作用に影響を与える可能性があります。Web サーバーが、意図的に送信されたことを確認するメカニズムなしに、クライアントからの要求を受信するように設計されている場合、攻撃者はクライアントをだまして Web サーバーに意図しない要求を行わせ、信頼できる要求として処理させてしまう可能性があります。これは、URL、画像のロード、XMLHttpRequest などを通じて実行することができ、データの公開や意図しないコードの実行を引き起こす可能性があります。この攻撃はユーザーの以前に認証されたセッションを利用するため、こうした悪用の形式は、ワンクリック攻撃またはセッションライディングとも呼ばれます。

脆弱コード例

コピー
  using System;
  using System.Web.UI;
    
  namespace CSRF_checker
  {
      public partial class _Default : Page
      {
          protected void Submit_Click(object sender, EventArgs e)
          {
             var txt = MyTextbox.Text;   // CS.CSRF.VALIDATE
         }
     }
 } 

この例では、コードは入力値を検証していないため、Klocwork は 10 行目で欠陥を報告します。

修正コード例

コピー
  using System;
  using System.Web.Helpers;
  using System.Web.UI;
    
  namespace CSRF_checker
  {
      public partial class _Default : Page
      {
          protected void Submit_Click(object sender, EventArgs e)
         {
             AntiForgery.Validate();
             var txt = MyTextbox.Text;   // no CS.CSRF.VALIDATE
         }
     }
 }

この修正された例では、コードは AntiForgery.Validate メソッドを使用することで入力メソッドを検証しているため、Klocwork は欠陥を報告しません。