本文へスキップ
>_ITDITDセキュリティ対策プラットフォーム

用語辞典

#CSRF#脆弱性#Web

CSRF(クロスサイトリクエストフォージェリ)とは — ログイン中の利用者に“勝手に操作”させる攻撃

CSRF(クロスサイトリクエストフォージェリ)は、ログイン中の利用者のブラウザを利用して、本人が意図しないリクエスト(送金・設定変更など)を別サイト経由で送らせる攻撃です。仕組みの図解と、本命の防御(CSRFトークン・SameSite Cookie・Origin確認)を、攻撃手順を伏せて防御目線で解説します。

公開日 2026-06-08 更新日 2026-06-08 4分で読める

「ログインしたまま“別のサイト”を開いただけで、知らないうちに送金や設定変更が走る」——それがCSRFです。仕組みと確実な防ぎ方を解説します(攻撃手順は載せません)。

なぜ成立するのか(仕組み)

ブラウザは、あるサイトへのリクエストにそのサイトのCookieを自動的に付けます。だから、利用者が銀行サイトにログイン中なら、別の悪意あるページから銀行への操作を送っても、ブラウザは“本人のCookie”を一緒に送ってしまいます。サーバーから見ると、本人の正規操作と区別がつきません。

① 利用者は対象サイトにログイン中(Cookie保持)
↓ うっかり別ページを開く
② 悪意あるページが、対象サイトへの操作リクエストを発生させる
↓ ブラウザが対象サイトのCookieを自動付与
③ サーバーは“本人の操作”として実行(送金・設定変更…)
ブラウザがCookieを自動送信するため、“別サイト経由”でも本人の操作として通ってしまう。

XSSが「被害者のブラウザでコードを動かす」のに対し、CSRFは「被害者のログイン状態を勝手に使う」攻撃です(→ XSS とは)。

防御

1

CSRFトークンを必須にする

状態を変える操作(フォーム送信・API)に、推測できない使い捨てトークンを要求。サーバーが発行し、リクエストに含まれないと拒否する。多くのフレームワークが標準提供。

2

SameSite Cookie を設定する

セッションCookieに SameSite=Lax(または Strict)を付け、別サイト起点のリクエストにCookieを付けさせない。近年の既定はLaxで、これだけでも大きく効く。

3

状態変更に GET を使わない

閲覧(GET)で副作用を起こさない設計に。変更はPOST/PUT/DELETEにし、トークン検証を通す。

4

Origin / Referer を確認する

重要操作では、リクエスト元(Origin)が自サイトかをサーバーで確認し、外部起点を弾く。

ITDの視点:ほぼ“解決済み”だが油断は禁物

モダンなフレームワークのCSRFトークン+ブラウザの SameSite=Lax 既定で、典型的なCSRFは大幅に減りました。とはいえ、独自実装のAPI・古い構成・トークンを省いた管理画面では今も普通に刺さります。「フレームワークに任せきり」でも、状態変更の経路にトークン検証が通っているかを一度自分で確認するのが安全です。

よくある抜け穴

仕組みを知っていても、実装では次の2点で抜けがちです。

  • GETに副作用を持たせている:閲覧用のGETで状態が変わる設計だと、画像タグや単なるリンクだけでCSRFが成立しえます。状態変更は必ずPOST/PUT/DELETEにし、トークン検証を通します。
  • 一部の経路だけトークン検証を忘れる:後から足したAPIや管理機能で、トークン検証が抜けていることがよくあります。「フレームワークに任せた」で安心せず、状態を変える全経路を一度棚卸ししてください。

次に読む

よくある質問

QCSRFとXSSは何が違う?
A

XSSは“被害者のブラウザでスクリプトを実行”させる攻撃、CSRFは“被害者のログイン状態を使って意図しないリクエストを送らせる”攻撃です。CSRFはスクリプトを実行できなくても、Cookieが自動送信される性質だけで成立します。

QCSRFの一番の防御は?
A

状態を変える操作(POST等)にCSRFトークンを必須にすることと、セッションCookieに SameSite(Lax/Strict)を設定することです。多くのフレームワークはトークンを標準提供しています。加えて、状態変更にGETを使わないことも基本です。

QSameSite Cookie だけで十分?
A

大幅に効きますが万能ではありません。古いブラウザや特定の遷移、サブドメイン構成などで隙が残るため、CSRFトークンと併用する多層防御が安全です。