同じランダム値をCookieとリクエストパラメータまたはヘッダーに入れ、両方が一致するか確認します。
Cookie:
csrf=XYZ123
Header:
X-CSRF-Token: XYZ123
攻撃者サイトはCookieを送信させることはできても、そのCookie値を読み取ってカスタムヘッダーへコピーできない、という性質を利用します。
ただし、単純に値が一致するだけの方式は、サブドメインなどからCookieを設定できる場合に破られる可能性があります。
Double Submit Cookieの値へHMACなどの署名を付け、認証セッションと結び付けます。
OWASPは、単純なDouble Submit Cookieよりも、セッションへ明示的に結び付けたSigned Double Submit Cookieを推奨しています。
概念的には次のような構造です。
token = random + HMAC(server_secret, session_id + random)
サーバーは次を確認します。
Cookieとヘッダーの値が一致する
HMAC署名が正しい
現在のセッションに結び付いている
独自実装は比較処理、エンコード、鍵管理、トークン固定などのミスが起きやすいため、フレームワーク標準機能を優先します。