私はいくつかのウェブサイトが次のようなcookieフィールドでCSRFトークンを使用するのを見てきました
_csrf=123abc
別のヘッダーとして、またはPOSTデータの一部としてではありません。攻撃者のWebサイトがこれらのCookieを使用してCSRFリクエストを被害者のWebサイトに送信すると、CSRFトークンはここでどのように役立ちますか? CSRFトークンがCookieに含まれていない!?混乱しています。
ええ、クッキーはブラウザからのすべてのリクエストで自動的に送信されます。したがって、Cookieでトークンを使用するだけでは、CSRF防御の目的全体が無効になります。
それで... CookieにCSRFトークンが表示されるすべてのサイトは脆弱ですか?いいえ。ほとんどの場合、Cookieの値は他の場所にも含まれています。ヘッダーまたは非表示のフォームフィールド。これは「ダブルサブミットCookie」パターンと呼ばれ、サーバーの状態を必要としないという利点があります。いつものように、 [〜#〜] owasp [〜#〜] はあなたをカバーしました:
ユーザーがサイトに対して認証を行う場合、サイトは(暗号学的に強力な)疑似ランダム値を生成し、それをセッションIDとは別にユーザーのマシン上のCookieとして設定する必要があります。サイトはこの値を保存する必要がないため、サーバー側の状態を回避できます。次に、サイトでは、すべてのトランザクション要求にこのランダムな値を非表示のフォーム値(または他の要求パラメーター)として含める必要があります。クロスオリジン攻撃者は、サーバーから送信されたデータを読み取ることも、同じオリジンポリシーに従ってCookie値を変更することもできません。これは、攻撃者が被害者に悪意のあるCSRFリクエストで必要な任意の値を送信させることができる一方で、攻撃者はCookieに保存された値を変更または読み取ることができないことを意味します。 Cookie値とリクエストパラメータまたはフォーム値は同じである必要があるため、攻撃者はランダムなCSRF値でリクエストを正常に送信することができません。