0

非表示のフォーム フィールドに CSRF トークンを実装することは、フォーム ポスト リクエストに対する CSRF の標準的な保護です。

しかし、GET リクエストに対してこれをどのように実装しますか? または、リクエスト本文の x-www-form-urlencoded の代わりに POST json データを ajax がリクエストしますか? これらの種類のことはすべてケースバイケースでアドホックに処理されますか?

4

2 に答える 2

2

OWASP は、 CSRF および GET リクエストについて次のように述べています。

理想的な解決策は、POST リクエストに CSRF トークンのみを含め、状態変更に影響を与えるサーバー側のアクションを POST リクエストにのみ応答するように変更することです。これは実際、RFC 2616 が GET 要求に要求するものです。機密性の高いサーバー側のアクションが POST 要求にのみ応答することが保証されている場合、GET 要求にトークンを含める必要はありません。

また、OWASP は次のように述べています。

このコントロールの多くの実装には、GET (URL) リクエストにチャレンジ トークンが含まれています [...]このコントロールは CSRF 攻撃のリスクを軽減するのに役立ちますが、セッションごとの一意のトークンが GET リクエストに対して公開されています。GET リクエストの CSRF トークンは、ブラウザの履歴、HTTP ログ ファイル、HTTP リクエストの最初の行を記録するネットワーク アプライアンス、保護されたサイトが外部サイトにリンクしている場合のリファラー ヘッダーなど、いくつかの場所で漏えいする可能性があります。

ここでの問題は、ユーザーのトークンが漏えいした場合でも脆弱であるということです。トークンは簡単に漏えいしてしまいます。これらの GET リクエストのすべてを POST リクエストに変換することを含まない、あなたの質問に対する適切な答えがあるかどうかはわかりません。

ASP.NET WebForms の Viewstate 機能は、CSRF に対してある程度の保護を提供しますが、これは非常に限定的です。実際には、POSTback 要求のみを保護します。

もっと簡単に言うと、ブラウザーがレンダリングする読み取り専用リソースを返す以上のことを行う関数へのエントリ ポイントとして GET 要求を使用しないでください。したがって、AJAX スクリプトで のような URL に対して GET ベースの呼び出しを行わないようにしてtransferMoney.aspx?fromAcct=xyz&toAcct=abc&amount=20ください。

HTTP 仕様では、HTTP GET リクエストに副作用があってはならないことが明示されています。可能な限り、 GETリクエストをべき等に保つことがベスト プラクティスと見なされます。

ASP.NET MVC を CSRF から保護する方法についての記事を書きました。この記事では、サイトのAntiForgeryTokenPOST コントローラー メソッドに を適用するための実用的なアプローチについて詳しく説明しています。

于 2013-01-15T20:03:47.323 に答える