×
サイバー攻撃について
  • 十分に長い

  • 暗号学的に予測困難

  • 利用者のセッションに関連付いている

  • 状態変更リクエストすべてで検証する

  • トークン欠落時も拒否する

  • GETパラメータへ入れない

  • URLやアクセスログへ残さない

  • 外部送信フォームへ埋め込まない

  • XSSから保護する

  • ログイン時などに必要に応じて更新する

PortSwiggerは、トークンをセッションへ結び付け、すべての対象リクエストで厳密に検証することを重要条件として挙げています。


6. CSRFトークンの種類

6-1. Synchronizer Token Pattern

サーバー側セッションにトークンを保存する方式です。

サーバーセッション
┌──────────────────┐
│ session_id: ABC  │
│ csrf: XYZ123     │
└──────────────────┘

フォーム
<input type="hidden" name="csrf" value="XYZ123">

リクエスト時に、フォームの値とサーバー側セッションの値を比較します。

長所

  • セッションへ確実に結び付けられる

  • 他ユーザーのトークンを流用しにくい

  • 実装モデルが分かりやすい

短所

  • サーバー側に状態を保存する

  • 複数タブや戻る操作との調整が必要な場合がある

  • リクエストごとに使い捨てると操作性が悪化する場合がある