2012-01-02 3 views
3

私の質問があまりにも単純ではないことを願っていますが、セキュリティに関して言えば、皆懐疑的です。ログイン/登録フォームにAntiForgeryTokenを入力するのは意味がありますか?

これらの2つのケース(ログイン/登録)以前はログインしていないユーザー(セッションCookie)がありませんでした。なぜログイン/登録フォームにAntiForgeryTokenがあるのですか?

答えて

5

通常、あなたはそうしません。あなたが話している攻撃は、クロスサイトリクエスト偽造(CSRF)です。このタイプの攻撃は、ログインしているユーザーに依存します(サイトAとサイトBにログインしていて、サイトAがこれを知っている場合、HTMLコードを入力すると、サイトBのようになりますそれを開始し、敏感な行動が実行される可能性があります)。これらの攻撃は、問題のサイトへのすべての要求を含むセッションCookie /トークンを送信するブラウザに依存しています(サイトAにはサイトBにアクションXを要求するリクエストが含まれているため、ブラウザはサイトBにリクエストを送信し、 (セッションクッキーを含む)は、その要求と共にサイトBに送信されます。

anti-CSRFトークンは、クライアントに要求フォームを送信するときに、クライアントがアクション要求とともに返信する必要がある推定不可能な値を含めるため機能します。戻ってくると、実行されるアクションのリクエストは、クライアントに送信したフォームから始まることがわかります。それが戻ってこない場合は、リクエストが偽造される可能性があるので、無視してください。サイトAのコードがサイトBへのリクエストを送信した場合、サイトBのセッションCookieを使用しても、サイトAのコードは反CSRFトークン値を含むことを知らないため、偽装されたリクエストは拒否されます。

サイトでCSRF攻撃を防御しようとしている場合、これらのトークンを、機密アクションを開始できるすべてのフォームに含めて、ログインしたユーザーを利用して偽のリクエストを防止する必要があります。この防御は、ログインしていないユーザーにとっては無関係です。ユーザーが現在ログインしていなければ、ブラウザがすべての要求を含むセッションCookie /トークンを送信するという事実を利用することはできません。

+2

CSRFの素敵な説明平易な言葉で! – Romias

+0

私はまた、「私は一般的に」と言っています。 CSRFの変種である「login CSRF」と呼ばれることもある、攻撃を緩和して軽減することができます。既にログインしているサイトにリクエストを送信するように誘惑するのではなく、他のユーザーの資格情報を使用してサイトにログインして、サイトがあなたを別のユーザーと見なすようにすることができます。たとえば、関係のないサイトにGoogleのログインコードが含まれていて、ブラウザがそのコードを見て実行した場合、Googleに攻撃者制御のユーザーとしてログインします。それで、あなたがログインしていないと思ったら、 – jeffsix

+0

あなたは本当になり、Googleはあなたの検索履歴(仮説的な例)を追跡しています。その後、攻撃者はこれらの資格情報を使用してログインし、検索したものを見ることができます。これは、CSRF攻撃とは異なりますが、関連するユースケースであり、これが気になるものなら、ログインページにCSRFトークンを置くことで緩和できるものです。 – jeffsix