ValidateAntiForgeryTokenの目的を説明しValidateAntiForgeryToken
、MVC 4での例を示していただけませんか?
この属性を説明する例は見つかりませんでしたか?
.BeginForm
ヘルパー内にこれを正しく配置できなかったのか、私には本当にわかりません。したがって、これはRailsのように自動的に存在します
ValidateAntiForgeryTokenの目的を説明しValidateAntiForgeryToken
、MVC 4での例を示していただけませんか?
この属性を説明する例は見つかりませんでしたか?
.BeginForm
ヘルパー内にこれを正しく配置できなかったのか、私には本当にわかりません。したがって、これはRailsのように自動的に存在します
回答:
MVCの偽造防止サポートにより、一意の値がHTTP専用のCookieに書き込まれ、同じ値がフォームに書き込まれます。ページが送信されるときに、Cookieの値がフォームの値と一致しない場合はエラーが発生します。
この機能により、クロスサイトリクエストフォージェリが防止されることに注意してください。つまり、認証されたユーザーの資格情報を使用して非表示のコンテンツを送信しようとして自分のサイトに投稿する別のサイトのフォームです。攻撃には、ログインしているユーザーをだましてフォームを送信させるか、ページが読み込まれたときにプログラムでフォームをトリガーするだけです。
この機能は、他の種類のデータ偽造や改ざんベースの攻撃を防止しません。
これを使用するには、アクションメソッドまたはコントローラーをValidateAntiForgeryToken
属性で装飾@Html.AntiForgeryToken()
し、フォームにメソッドへの呼び出しを呼び出します。
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()
ASP.Net Coreでは、偽造防止トークンがフォームに自動的に追加されるため、@Html.AntiForgeryToken()
かみそりフォーム要素を使用する場合、またはIHtmlHelper.BeginFormを使用する場合、およびフォームのメソッドがGETでない場合は、追加する必要はありません。
次のようなフォームの入力要素が生成されます。
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">
また、ユーザーがフォームを送信すると、検証が有効になっている場合、このトークンはサーバー側で検証されます。
[ValidateAntiForgeryToken]
属性はアクションに対して使用できます。このフィルタが適用されているアクションに対して行われたリクエストは、リクエストに有効な偽造防止トークンが含まれていない限りブロックされます。
[AutoValidateAntiforgeryToken]
属性はコントローラーに対して使用できます。この属性は、ValidateAntiForgeryToken属性と同じように機能しますが、次のHTTPメソッドを使用して行われたリクエストにトークンを必要としない点が異なります。
GET
HEAD
OPTIONS
TRACE
追加情報:https : //docs.microsoft.com/pl-pl/aspnet/core/security/anti-request-forgery
マイクロソフトは、セキュリティの目的でアプリケーションで使用する組み込み機能を提供しているため、サイトをハッキングしたり、重要な情報に侵入したりすることはできません。
Harpreet SinghによるMVCアプリケーションのValidateAntiForgeryTokenの目的から:
ValidateAntiForgeryTokenの使用
この概念を理解するために簡単な例を試してみましょう。あまり複雑にしたくないので、Visual Studioで既に利用可能なMVCアプリケーションのテンプレートを使用します。これを段階的に行います。はじめましょう。
ステップ1-デフォルトのインターネットテンプレートを使用して2つのMVCアプリケーションを作成し、それらの名前をそれぞれCrossSite_RequestForgeryおよびAttack_Applicationとして指定します。
次に、CrossSite_RequestForgeryアプリケーションのWeb Configを開き、接続文字列を以下の文字列に変更して保存します。
`
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF; Integrated Security=true;" providerName="System.Data.SqlClient" /> </connectionStrings>
次に、[ツール] >> [NuGetパッケージマネージャー]、[パッケージマネージャーコンソール]の順にクリックします
次に、パッケージマネージャーコンソールで以下の3つのコマンドを実行して、データベースを作成します。
Enable-Migrations add-migration first update-database
重要な注意-開発者の作業方法でこの例を作成したいので、コードファーストアプローチでデータベースを作成しました。データベースを手動で作成することもできます。それはあなたの選択です。
- 次に、アカウントコントローラーを開きます。ここでは、タイプがpostであるregisterメソッドが表示されます。このメソッドの上には、[ValidateAntiForgeryToken]として利用可能な属性があるはずです。この属性にコメントを付けます。次に、registerを右クリックして、Viewをクリックします。ここでも、HTMLヘルパーが@ Html.AntiForgeryToken()として見つかります。これもコメント。アプリケーションを実行し、登録ボタンをクリックします。URLは次のように開かれます。
http:// localhost:52269 / Account / Register
注 -読者の皆さんの頭に浮かぶ質問は、これらの2つのヘルパーにコメントが必要な理由です。これらは、リクエストの検証に使用されることを知っているからです。次に、これらのヘルパーを適用する前後の違いを示したいからです。
次に、2番目のアプリケーションであるAttack_Applicationを開きます。次に、アカウントコントローラーのRegisterメソッドを開きます。以下に示すように、POSTメソッドを単純なメソッドに変更するだけです。
登録用紙
- @ Html.LabelFor(m => m.UserName)@ Html.TextBoxFor(m => m.UserName)
- @ Html.LabelFor(m => m.Password)@ Html.PasswordFor(m => m.Password)
- @ Html.LabelFor(m => m.ConfirmPassword)@ Html.PasswordFor(m => m.ConfirmPassword)
7.ここで、あなたがハッカーで、CrossSite_RequestForgeryアプリケーションにユーザーを登録できるURLを知っているとします。これで、ForgeryサイトをAttacker_Applicationとして作成し、同じURLをpostメソッドに配置しました。
8.このアプリケーションを実行し、登録フィールドに入力して、登録をクリックします。CrossSite_RequestForgeryアプリケーションに登録されていることがわかります。CrossSite_RequestForgeryアプリケーションのデータベースを確認すると、入力したエントリが表示されます。
- 重要-次に、CrossSite_RequestForgeryアプリケーションを開き、アカウントコントローラーでトークンをコメント化して、ビューを登録します。同じプロセスでもう一度登録してみてください。すると、以下のようなエラーが発生します。
「/」アプリケーションでのサーバーエラー。________________________________________必要な偽造防止Cookie「__ RequestVerificationToken」が存在しません。
これはコンセプトが言うことです。ビューに追加するもの、つまり@ Html.AntiForgeryToken()は、ロード時に__RequestVerificationTokenを生成し、[ValidateAntiForgeryToken]をコントローラーメソッドで使用できるようにします。このトークンをポストタイムに一致させます。トークンが同じ場合、これは有効なリクエストであることを意味します。