web-dev-qa-db-ja.com

'[ValidateAntiForgeryToken]'は本当にどういう意味ですか?

まず第一に、私はまだMVC4の初心者です。多くのアクションが[ValidateAntiForgeryToken]で装飾されていることに気付いた後、私はそれをグーグルで検索しましたが、それでもちょっと混乱しています。

誰かが最も簡単な例を使用してその概念を説明できますか?

11
LifeScript

簡単に言えば、外部からの投稿リクエストを防ぎます。したがって、他のサイトのメソッドを使用することはできません。

使い方。ビューのHtml.BeginFormAntiForgeryTokenがあります。

@using (Html.BeginForm()){

@Html.AntiForgeryToken()

//** fields of form

}

フォームを送信すると、データがControllerメソッドに送信されます。メソッドにValidateAntiForgeryToken属性がある場合、送信するデータにForgeryTokenがあるかどうかを検証します。

[ValidateAntiForgeryToken]
public ViewResult Update()
{
}

ForgeryTokenは、セッションごとに1回生成されます。

17
Andriy Gubal

ここにAntiForgeryTokenに関する多くの情報があります: http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

これは、クロスサイトリクエストフォージェリ(CSRF)を防ぐためです。 「保存」をクリックしてフォームを要約し、サーバー上で何らかのアクションを実行する、つまりユーザーの詳細を保存するのは、かなり標準的な動作です。フォームを送信するユーザーが、彼らが主張するユーザーであることをどのように知っていますか?ほとんどの場合、CookieまたはWindowsベースの認証を使用します。

攻撃者が、少し隠されたIFRAMEでまったく同じフォームを送信するサイトにあなたを誘惑した場合はどうなりますか? Cookieはそのまま送信され、サーバーはそのリクエストを正当なリクエストとは異なるものとして認識しません。 (Gmailが発見したように: http://www.gnucitizen.org/blog/google-gmail-e-mail-Hijack-technique/

偽造防止トークンは、ページが生成されるたびに追加のCookieトークンを作成することにより、この形式の攻撃を防ぎます。トークンはフォームとCookieの両方にあり、フォームとCookieが一致しない場合、CSRF攻撃が発生します(攻撃者は上記の攻撃を使用して偽造防止トークンを読み取ることができないため)。

そして、上記の記事から、塩は何をしますか:

ソルトは単なる任意の文字列です。異なるソルト値は、異なる偽造防止トークンが生成されることを意味します。つまり、攻撃者がなんとかして有効なトークンを入手できたとしても、別のソルト値が必要なアプリケーションの他の部分でそれを再利用することはできません。

トークンはどのように生成されますか? ソース をダウンロードし、AntiForgeryDataSerializer、AntiForgeryDataクラスを確認してください。 これには重複があります。

6
Bhushan Firake