CSRF

CSRFとは

CSRF(Cross-Site Request Forgery: クロスサイトリクエストフォージェリ)は、ログイン中の利用者に、本人が意図しないリクエストを送らせる攻撃です。「リクエスト強要」とも呼ばれます。

例えば、あるサービスにログインしたままのブラウザで攻撃者の罠ページを開くと、ページに仕込まれた仕掛けが「退会する」「送金する」といったリクエストを本人になりすまして送信してしまいます。

なぜ成立するのか

ブラウザは、リクエスト先のサイトに対応する Cookie を自動で付けて送信する性質があります。[[セッション管理]] を Cookie で行っているサイトでは、罠ページ経由のリクエストにも正規のセッション Cookie が付いてしまうため、サーバー側からは「本人の操作」と区別がつきません。

つまり CSRF は「Cookie の自動送信」というブラウザの仕様を逆手に取った攻撃です。

対策の基本

  • CSRFトークン: フォームごとに推測不能なトークンを埋め込み、サーバーで照合する。罠ページはトークンを知らないため偽リクエストを弾けます
  • SameSite属性: Cookie に SameSite=Lax などを設定し、他サイト発のリクエストに Cookie を付けないようにする([[WebストレージとCookie]])
  • 重要操作の再認証: 送金やパスワード変更の前にパスワードや確認コードを再入力させる
  • 更新系の操作を GET で実装しない(リンクを踏むだけで実行される作りにしない)

XSSとの違い

CSRF[[XSS(クロスサイトスクリプティング)]]
攻撃の内容偽のリクエストを送らせる悪意あるスクリプトを実行させる
悪用するものCookie の自動送信エスケープ漏れのある出力
主な対策CSRFトークン・SameSite属性エスケープ処理・CSP

名前が似ていて混同されがちですが、仕組みも対策も別物です。

関連技術とのつながり

  • [[セッション管理]] — Cookie ベースのセッションが攻撃の前提になる
  • [[WebストレージとCookie]] — SameSite 属性など Cookie の挙動の理解が対策に直結する
  • [[XSS(クロスサイトスクリプティング)]] — 混同しやすい攻撃。違いを整理して覚える
  • [[CORS]] — 「サイトをまたぐリクエスト」に関するブラウザ側の別の仕組み
  • [[セキュリティヘッダー(CSP・HSTS)]] — トークン照合をすり抜けるクリックジャッキングを防ぐ
Q: CSRFはブラウザのどんな性質を悪用した攻撃?
- [x] リクエスト先サイトのCookieを自動で付けて送信する性質
- [ ] JavaScriptを実行できる性質
- [ ] 画像をキャッシュする性質
解説: 罠ページ経由のリクエストにも正規のセッション Cookie が自動で付くため、本人の操作と区別できなくなります。

Q: CSRF対策として適切なのはどれ?
- [ ] 出力時のエスケープ処理
- [x] フォームにCSRFトークンを埋め込んでサーバーで照合する
- [ ] パスワードのハッシュ化
解説: 罠ページは推測不能なトークンを知らないため、トークン照合で偽のリクエストを弾けます。

Q: CSRFとXSSの違いとして正しいのはどれ?
- [ ] どちらも同じ攻撃の別名である
- [ ] CSRFはスクリプトを実行させ、XSSは偽リクエストを送らせる
- [x] CSRFは偽リクエストを送らせ、XSSはスクリプトを実行させる
解説: CSRF は Cookie の自動送信を悪用した「リクエスト強要」、XSS はスクリプトの「実行」で、仕組みも対策も異なります。