Skip to main content

CSRF - Cross-Site Request Forgery Explained

About 2 min read

CSRF (Cross-Site Request Forgery、クロスサイトリクエストフォージェリ) とは、 ユーザーが認証済みの Web サービスに対して、攻撃者が意図した不正なリクエストを 送信させる攻撃です。ユーザーがログイン中のサービスの認証情報 (Cookie) を 悪用するため、ユーザー自身が操作したかのようにリクエストが処理されます。XSS と並ぶ代表的な Web アプリケーション攻撃です。 2025 年現在、主要なフレームワーク (Django、Rails、Next.js) は CSRF 対策を デフォルトで組み込んでいますが、 API エンドポイントや SPA での実装漏れが 依然として報告されています。

現場での使用例

「脆弱性診断で EC サイトの配送先変更 API に CSRF 対策が未実装であることが 判明しました。攻撃者が罠ページを用意すれば、ログイン中のユーザーの 配送先を任意の住所に変更できる状態でした。」

CSRF 攻撃のフロー

ユーザーが正規サイトにログイン
攻撃者の罠ページを閲覧
Cookie 付きで不正リクエスト送信
正規サイトが処理を実行

CSRF の攻撃メカニズム

攻撃者は罠となる Web ページを用意し、そこにログイン中のサービスへの リクエストを埋め込みます。たとえば、銀行サイトにログインしたまま 攻撃者のページを閲覧すると、ブラウザが自動的に銀行サイトへの送金リクエストを 送信してしまいます。ブラウザは Cookie を自動送信するため、 銀行サイト側からは正規のユーザーからのリクエストと区別できません。web security books on Amazonで攻撃の詳細を学べます。

実際の被害シナリオ

EC サイトにログインした状態で、攻撃者が仕込んだリンクをクリックすると、 配送先住所が攻撃者の住所に変更されるケースがあります。また、 SNS で ログイン中に罠ページを閲覧した結果、意図しない投稿やフォローが行われる 被害も報告されています。セッションハイジャックと 組み合わされると、被害がさらに深刻化します。オンラインバンキングでは 送金操作に対する CSRF 対策が特に重要です。

防御手法

開発者側の対策として、 CSRF トークン (ランダムな一意の値) をフォームに 埋め込み、リクエスト時に検証する方法が標準的です。 SameSite Cookie 属性を 設定することで、クロスサイトからの Cookie 送信を制限できます。 ユーザー側では、重要な操作の後はログアウトする習慣をつけ、 不審なリンクをクリックしないことが基本です。強力なランダムパスワードでアカウントを保護し、多要素認証を 有効にすることで、万が一の被害を軽減できます。secure web development guides (Amazon)も参考になります。

Related Terms

Was this article helpful?

XHatena