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

CSRFとは

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

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

対策漏れが起きやすい箇所

CSRF 対策は、ログインや送金のような目立つ機能には実装されていても、住所やメールアドレスの変更といった個別の設定変更 API で漏れることが少なくありません。フレームワークが標準で保護するのは主にフォーム経由の送信であり、後から追加された API エンドポイントは開発者が明示的に対策しない限り無防備になり得ます。対策の有無は画面の見た目からは分からないため、脆弱性診断では状態を変更するリクエストを 1 件ずつ検査して漏れを洗い出します。一見地味な機能の API でも、ログイン中のユーザーの設定を攻撃者が書き換える入口になる点で見過ごせません。

CSRF 攻撃のフロー

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

CSRF の攻撃メカニズム

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

実際の被害シナリオ

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

防御手法

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

関連用語

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