CSRF トークン
CSRF トークン とは何ですか?
CSRF トークンセッションごとに予測不能な値をフォームやヘッダーに埋め込み、状態を変える要求が自サイトから出たことをサーバーが確認できるようにする仕組み。
CSRF トークンはクロスサイトリクエストフォージェリへの定番防御策です。サーバーはランダム値を生成してユーザーのセッションに紐づけ、HTML フォームに埋め込むか専用ヘッダーで送ります。状態を変える各リクエストでは送信されたトークンと期待値を比較し、不一致なら拒否します。代表的な実装は同期トークン方式(サーバー側状態)、ダブルサブミットクッキー(ステートレス)、OWASP HMAC 方式です。現代のアプリでは CSRF トークン、SameSite=Lax/Strict クッキー、カスタムヘッダー、Origin/Referer 検証、厳格な CORS を組み合わせるべきです。JS から bearer トークンのみで呼び出す API は CSRF トークン不要ですが、再生攻撃対策は必要です。
● 例
- 01
フォーム内の隠しフィールド <input type="hidden" name="csrf" value="a8f1...">。
- 02
X-CSRF-Token ヘッダーをサーバー側でセッション秘密値と照合する。
● よくある質問
CSRF トークン とは何ですか?
セッションごとに予測不能な値をフォームやヘッダーに埋め込み、状態を変える要求が自サイトから出たことをサーバーが確認できるようにする仕組み。 サイバーセキュリティの ID とアクセス カテゴリに属します。
CSRF トークン とはどういう意味ですか?
セッションごとに予測不能な値をフォームやヘッダーに埋め込み、状態を変える要求が自サイトから出たことをサーバーが確認できるようにする仕組み。
CSRF トークン はどのように機能しますか?
CSRF トークンはクロスサイトリクエストフォージェリへの定番防御策です。サーバーはランダム値を生成してユーザーのセッションに紐づけ、HTML フォームに埋め込むか専用ヘッダーで送ります。状態を変える各リクエストでは送信されたトークンと期待値を比較し、不一致なら拒否します。代表的な実装は同期トークン方式(サーバー側状態)、ダブルサブミットクッキー(ステートレス)、OWASP HMAC 方式です。現代のアプリでは CSRF トークン、SameSite=Lax/Strict クッキー、カスタムヘッダー、Origin/Referer 検証、厳格な CORS を組み合わせるべきです。JS から bearer トークンのみで呼び出す API は CSRF トークン不要ですが、再生攻撃対策は必要です。
CSRF トークン からどのように防御しますか?
CSRF トークン に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
● 関連用語
- attacks№ 239
クロスサイトリクエストフォージェリ(CSRF)
認証済みユーザーのブラウザに、脆弱なサイトへ意図しないリクエストを送らせ、本人の同意なく状態変更操作を実行させる Web 攻撃。
- appsec№ 961
SameSite Cookie
クロスサイトリクエストで Cookie を送信するかをブラウザに指示する属性で、値は Strict・Lax・None。主に CSRF 対策に用いる。
- identity-access№ 1020
セッショントークン
認証後に発行される不透明な識別子。クライアントが各リクエストで送り返し、サーバーはそれをキーにユーザーのセッション状態を引き当てる。
- identity-access№ 1018
セッション管理
認証済みセッションを発行・維持・更新・失効させる一連のコントロール。ログアウトや期限切れまで、利用者の身元を後続のリクエストに紐付ける。
- appsec№ 983
Secure Cookie フラグ
Cookie を HTTPS でのみ送信させる属性で、ネットワーク上の平文露出を防ぐ。
- appsec№ 223
CORS(オリジン間リソース共有)
ブラウザが強制する仕組みで、サーバーが同一オリジンポリシーを選択的に緩め、あるオリジンの JavaScript から別オリジンのレスポンスを読み取れるようにする。