2009-09-10 14 views
16

偽造トークン塩の使用は何ですか?

ASP.NET MVC 1.0には、クロスサイトリクエスト偽造セキュリティ問題を処理するための新機能があります。

 <%= Html.AntiForgeryToken() %> 
[ValidateAntiForgeryToken] 
public ViewResult SubmitUpdate() 
{ 
    // ... etc 
} 

新しいフォームがレンダリングされるたびにhtmlフォームで生成されたトークンが変更されています。

これらのトークンの生成方法を知りたいですか?また、一部のソフトウェアを使用してこのサイトをスキャンすると、別のセキュリティ上の問題が報告されます。セッションが修正されました。どうして?トークンが変更されたままになっているので、この問題はどうやって起こりますか?

また、antiForgeryTokenでは "塩"という別の関数がありますが、私は本当にこれが何のために使われているかを知っています。たとえ "塩"を使ってトークンを生成しなくても、トークンは常に変化しますなぜそのような機能を持っていますか?

答えて

19

ロット:http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

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

攻撃者が、隠されたIFRAMEで正確に同じフォームを送信するサイトに誘導する場合はどうなりますか? Cookieはそのまま送信され、サーバーは要求を正当な要求とは異なるものとして見ません。 (gmailが発見したように)

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

と塩が記事から上に、何をするのか:

塩は単なる任意の文字列です。異なるソルト値は、異なる偽造トークンが生成されることを意味します。これは、たとえ攻撃者が有効なトークンを何らかの形で保持しても、異なる塩分値が必要なアプリケーションの他の部分で再利用できないことを意味します。

更新:トークンはどのように生成されますか? sourceをダウンロードし、AntiForgeryDataSerializer、AntiForgeryDataクラスを見てください。

+0

実際に私はこれをすべて知っています、あなたは私の問題を見ましたか?私はちょうど今ブログから来ています。 – MemoryLeak

+0

「セッション固定」の問題、または「塩」に関する質問はどちらですか? "セッションが固定"私はよく慣れていない、あなたは何をサイトをスキャンするために使用していますか? – russau

+0

ありがとう、russau、しかし、私はちょうどブログの投稿に同意しない、私はここで質問をする.... – MemoryLeak

1

あなたは、いくつかの無関係な問題を尋ねました:

  1. セキュリティソフトウェアは、「セッションは固定」報告している理由を私は知りません。レポート
  2. 偽造防止トークンに付属の資料を読んで試してみてください:

これは、各要求が有効であることを検証するために(おそらく)が使用されています。トークンが渡されない場合、誰かがページ?x=1へのリンクを提示しようとすると、要求は拒否されます。さらに、同じアイテムの重複投稿を防止する(可能性があります)。あなたは「ポスト」二度、トークンはおそらく(各要求)を変更します]をクリックし、このケースのようなものを介して検出された場合:

Session["nextToken"] = token; 
WriteToken(token); 

... 

if(!Request["nextToken"] == Session["nextToken"]){ 
    ... 
} 

// note: order in code is slightly different, you must take the token 
// before regenerating it, obviously 

私は、このための用語(それが保護攻撃が)​​」と呼ばれていると思いますCSRF "(クロスサイトリクエスト偽造)、最近です。ここAntiForgeryToken上の情報の

+0

なぜトークンがSessionIDに関連していると言ったのですか? – MemoryLeak

+0

MemoryLeak:私はASP.NET MVCを特に使用していません。私は一般的にリクエストトークンの目的について回答していました。うまくいけば誰かがあなたのためにそれをクリアすることができます。 –

+0

もしあなたが正しいのであれば、 "塩"は何のために使われていますか? – MemoryLeak

関連する問題