メインコンテンツへスキップ

CSRFとは

この記事は約 2 分で読めます

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 セキュリティの書籍 (Amazon)で攻撃の詳細を学べます。

実際の被害シナリオ

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

防御手法

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

関連用語

この記事は役に立ちましたか?

Xはてブ