2

この投稿では、すべての JSON HttpGet および HttpPost AJAX 呼び出しのトークン システムについて説明します。

つまり、AntiForgeryToken 属性を使用してページにトークンを作成し、その値が AJAX 呼び出しを介してコントローラーに返されることを手動で検証します。

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks

何時間ものインターネット調査の後、この可能性への言及は常にありますが、実際にそれを実装する人は誰もいません. 代わりに、一般的に繰り返される手法は、1) HttpPost AJAX リクエストのみを使用する (REST を破壊する)、2) すべての json 応答を匿名オブジェクトにラップする、.net MVC4 で非常に洗練されていないコードになる、3) 解析不能な cruf を使用する、これが壊れる、というものです。 backbone.js などの一般的なライブラリ

では、上記のトークン システムを使用しないのはなぜでしょうか。私は何が欠けていますか?

4

1 に答える 1

3

CSRF に関心があり、REST と REST を正しく実行することに関心がある場合は、CSRF の影響を受けるようなことを GET で行うべきではありません。なぜなら、AntiForgeryTokens の全体的な目的はデータの変更を処理することだからです (つまり、最初にトークンを含むページを取得しないと、AntiForgeryToken を使用できません)。

したがって、POST を使用すると「REST が壊れる」と言うのは、そもそもトークンを使用する目的を誤解しているようです。GET が機密情報を公開する可能性があることは事実ですが、GET でトークンを使用する場合は、最初にトークンを取得する何らかの方法が必要です。

json と Ajax を使用した Ajax と AntiForgeryToken の実際の問題は、"組み込み" 検証がフォーム値でのみ機能し、json では機能しないことです。そのため、自分で検証を行う必要があります。リンク先の記事では、その方法について適切に説明されています。

于 2013-04-24T03:32:58.380 に答える