web-dev-qa-db-ja.com

CSRF Coo​​kieとセッションベースのトークン

CSRFトークンを生成し、非表示のフォームフィールドに含めます。リクエストを受け取ると、フォームの値をユーザーのセッションまたはCookieに保存されている値と照合します。

このトークンをセッションの代わりにCookieに格納することは、セキュリティの観点からまだ許容できると考えられますか?

13
Jarrod Everett

そのようなシステムに対する直接的な攻撃は考えられませんが、そのようなトークンをクライアント側に置くことはあまり良い考えではないと主張します。 潜在的リークまで自分を開いています。それらをセッションに保存すると、取得できなくなります。

5
Polynomial

トークンをCookieに格納することは、CSRFの問題の解決策ではありません。 CSRFの脆弱性は、ブラウザがリクエストとともに自動的にCookieを送信するという事実から生じます。その結果、アプリケーションはその要求が有効な(そして認証された)ユーザーからのものであると見なします。攻撃者が必要とするのは、送信する必要がある正確な要求だけです。ランダムなAnti-CSRFトークン(リクエスト固有またはセッション固有)を導入すると、有効なリクエストを準備することが不可能(または非常に困難)になります(通常、攻撃者はanti-csrfトークンの有効な値を知らないため)。サーバーによって削除されました。

トークンをCookieに入れると、セッションCookieと同じように自動的にサーバーに送信されるため、追加の保護を受けることはありません。

編集:私はあなたの質問を誤解するかもしれません。同じ値が非表示フィールドとCookieに送信される、いわゆるダブルサブミットCookieパターンについて話しているかもしれません。

はい、CSRFトークンをセッションに保存することに問題がある場合、このアプローチは受け入れられます。これについて詳しくは、こちらをご覧ください Double Submit Cookies

8
pgolen

Cookieとして保存すると、リプレイ攻撃の実装が簡単になります。

セッションに保存されている場合、同じトークンを再生するとCSRFに影響する小さなウィンドウがありますが、特にセッション検証を追加した場合(ユーザーエージェントの変更を追跡している場合)は、機会のウィンドウが大幅に減少しますが、= Chromeはセッションの途中で透過的にアップグレードします-またはクライアントのIPアドレスから組織名を使用します)

0
symcbean