web-dev-qa-db-ja.com

ValidateAntiForgeryTokenの目的、説明、および例

ValidateAntiForgeryToken の目的を説明し、MVC 4のValidateAntiForgeryTokenの例を教えてください。

この属性を説明する例が見つかりませんでしたか。

278
Tabriz Atayi

MVCの偽造防止サポートは、HTTPのみのCookieに固有の値を書き込み、それから同じ値がフォームに書き込まれます。ページが送信されると、cookieの値がformの値と一致しないとエラーが発生します。

この機能は クロスサイトリクエストフォージェリ を防止することに注意することが重要です。つまり、認証されたユーザーの資格情報を使用して隠しコンテンツを送信しようとしてあなたのサイトに投稿する別のサイトからのフォームです。この攻撃は、ログインしているユーザーをだましてフォームを送信させるか、単にページが読み込まれたときにプログラムでフォームをトリガーすることによって行われます。

この機能は、他の種類のデータ偽造や改ざんによる攻撃を防ぐことはできません。

それを使用するには、 ValidateAntiForgeryToken 属性でアクションメソッドまたはコントローラを装飾し、メソッドに投稿するフォームで @Html.AntiForgeryToken() を呼び出します。

324
Richard Szalay

ValidateAntiForgeryToken属性の基本的な目的は、クロスサイトリクエストフォージェリ攻撃を防ぐことです。

クロスサイトリクエストフォージェリは、信頼できるユーザのブラウザから有害なスクリプト要素、悪意のあるコマンド、またはコードが送信される攻撃です。これについての詳細は、 をご覧ください。http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages .

使い方は簡単ですが、ValidateAntiForgeryToken属性でメソッドを次のように装飾する必要があります。

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult CreateProduct(Product product)  
{
  if (ModelState.IsValid)  
  {
    //your logic 
  }
  return View(ModelName);
}

System.Web.Mvc名前空間から派生しています。

そしてあなたの意見では、このコードを追加してトークンを追加し、送信時にフォームの検証に使用されるようにします。

@Html.AntiForgeryToken()
44
Chandra Malla

マイクロソフトでは、セキュリティの目的でアプリケーションで使用している組み込み機能を提供しています。そのため、サイトをハッキングしたり、重要な情報を侵害したりすることはできません。

ValidateAntiForgeryTokenの使用

この概念を理解するために簡単な例を試してみましょう。あまり複雑にしたくないので、すでにVisual Studioで利用可能なMVCアプリケーションのテンプレートを使用するつもりです。私たちはこのステップを一歩ずつ進めます。始めましょう。

  1. ステップ1 - デフォルトのインターネットテンプレートを使用して2つのMVCアプリケーションを作成し、それらの名前をそれぞれCrossSite_RequestForgeryおよびAttack_Applicationとして付けます。

  2. それでは、CrossSite_RequestForgeryアプリケーションのWeb Configを開き、接続文字列を下記のものに変更して保存します。

`

<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF; Integrated Security=true;" providerName="System.Data.SqlClient" /> 
 </connectionStrings>

`

  1. それでは、Tools >> NuGet Package Managerをクリックしてから、Package Manager Consoleをクリックしてください。

  2. それでは、データベースを作成するためにPackage Managerコンソールで下記の3つのコマンドを実行します。

有効 - 移行追加 - 移行最初の更新データベース

重要な注意 - 私は開発者の作業方法でこの例を作成したいので、コード優先アプローチでデータベースを作成しました。データベースを手動で作成することもできます。それはあなたの選択です。

  1. それでは、Account Controllerを開きます。ここでは、タイプがpostである登録方法を見るでしょう。このメソッドの上には、[ValidateAntiForgeryToken]として使用できる属性があります。この属性をコメントしてください。今すぐ登録を右クリックし、表示に移動をクリックします。ここでも、@ Html.AntiForgeryToken()のようなHTMLヘルパーが見つかります。これもコメントしてください。アプリケーションを実行して[登録]ボタンをクリックしてください。 URLは次のように開かれます。

http:// localhost:52269 /アカウント/登録

- 読者全員の頭の中で疑問が投げかけられているのは、これら2つのヘルパーがコメントを必要とする理由であることがわかりました。それで、私はこれらのヘルパーを適用する前後に違いを見せたいという理由だけであなたにすべてを知らせたいです。

  1. 次に、Attack_Applicationという2番目のアプリケーションを開きます。次に、Account ControllerのRegister methodを開きます。以下のようにPOSTメソッドを単純なものに変更するだけです。

    登録用紙
    1. @ Html.LabelFor(m => m.UserName)@ Html.TextBoxFor(m => m.UserName)
    2. @ Html.LabelFor(m => m.Password)@ Html.PasswordFor(m => m.Password)
    3. @ Html.LabelFor(m => m.ConfirmPassword)@ Html.PasswordFor(m => m.ConfirmPassword)

7.今、あなたがハッカーであり、CrossSite_RequestForgeryアプリケーションでユーザーを登録できるURLを知っているとします。これで、あなたは偽造サイトをAttacker_Applicationとして作成し、同じURLをpostメソッドに追加しました。

8.今すぐこのアプリケーションを実行し、登録フィールドに入力して[登録]をクリックします。 CrossSite_RequestForgeryアプリケーションに登録されているのがわかります。あなたがCrossSite_RequestForgeryアプリケーションのデータベースをチェックするならば、あなたはあなたが見たそしてあなたが入力したエントリを見るでしょう。

  1. 重要 - 今すぐCrossSite_RequestForgeryアプリケーションを開き、Account ControllerでトークンをコメントアウトしてViewを登録します。同じプロセスでもう一度登録してみてください。すると、以下のようにエラーが発生します。

'/'アプリケーションでサーバーエラーが発生しました。


必要な偽造防止クッキー "__RequestVerificationToken"が存在しません。

これが概念が言うことです。 Viewで追加したもの、つまり@ Html.AntiForgeryToken()は、ロード時に__RequestVerificationTokenを生成し、[ValidateAntiForgeryToken]をControllerメソッドで使用可能にします。投稿時にこのトークンを一致させます。 tokenが同じなら、それはこれが有効なリクエストであることを意味します。

1
Vinayak Savale