csrf トークンを Cookie に保存するのは良い方法ですか、それともフォームで隠しフィールドを使用する方が良いですか? また、キャプチャが行っているように、ユーザーリクエストごとに csrf トークンを再生成するのは良いことですか?
ありがとう
csrf トークンを Cookie に保存するのは良い方法ですか、それともフォームで隠しフィールドを使用する方が良いですか? また、キャプチャが行っているように、ユーザーリクエストごとに csrf トークンを再生成するのは良いことですか?
ありがとう
CSRF cookie は確かに攻撃に対してオープンですが、セッション値はリクエストの本文またはヘッダーに保存されている送信されたトークン値に対して常にチェックされるため、実装は安全です。OWASP Web サイトで概説されている二重送信 ( http のみの Cookie と投稿データ) またはトークン シンクロナイザー (セッションと投稿データ) のパターンは適切な方法であり、どちらも Cookie を使用します。
前述のように、ダブル サブミットはストレージをクライアントに移動するため、ステートレスと見なされますが、いずれにせよ比較のための 2 つのトークンがあり、そのうちの 1 つは攻撃者には常に不明のままです。
フォームに含めることをお勧めします。CSRF トークンの背後にある考え方は、それが受動的に渡されないということです (たとえば、悪意のあるユーザーがブラウザを騙して何か厄介な URL にアクセスさせることができる場合)。Cookie は受動的に渡されます。
この質問に対する最良の説明は、OWASP Web サイトのOWASP CSRF 防止チート シートページにあります。
まず、 CSRF トークンにCookieを使用してもあまり役に立ちません。すべての Cookie が、秘密の Cookie も含めてすべてのリクエストで送信されるためです。エンドユーザーがだまされてリクエストを送信したかどうかに関係なく、すべての認証トークンが送信されます。
第二に、アプリケーションは、「CSRFToken」などの共通名を持つフォームに非表示の入力パラメーターを含めることができます。このトークンの値は、攻撃者が推測できないようにランダムに生成する必要があります。
さらに、Challenge-Response は CSRF のもう 1 つの防御オプションです。次の方法で実装できます。