CSRFとは
本文约需 2 分钟阅读
CSRF (Cross-Site Request Forgery、クロスサイトリクエストフォージェリ) とは、 ユーザーが認証済みの Web サービスに対して、攻撃者が意図した不正なリクエストを 送信させる攻撃です。ユーザーがログイン中のサービスの認証情報 (Cookie) を 悪用するため、ユーザー自身が操作したかのようにリクエストが処理されます。XSS と並ぶ代表的な Web アプリケーション攻撃です。 2025 年現在、主要なフレームワーク (Django、Rails、Next.js) は CSRF 対策を デフォルトで組み込んでいますが、API エンドポイントや SPA での実装漏れが 依然として報告されています。
現場での使用例
「脆弱性診断で EC サイトの配送先変更 API に CSRF 対策が未実装であることが 判明しました。攻撃者が罠ページを用意すれば、ログイン中のユーザーの 配送先を任意の住所に変更できる状態でした。」
CSRF 攻撃のフロー
CSRF の攻撃メカニズム
攻撃者は罠となる Web ページを用意し、そこにログイン中のサービスへの リクエストを埋め込みます。たとえば、銀行サイトにログインしたまま 攻撃者のページを閲覧すると、ブラウザが自動的に銀行サイトへの送金リクエストを 送信してしまいます。ブラウザは Cookie を自動送信するため、 銀行サイト側からは正規のユーザーからのリクエストと区別できません。Web セキュリティの書籍 (Amazon)で攻撃の詳細を学べます。
実際の被害シナリオ
EC サイトにログインした状態で、攻撃者が仕込んだリンクをクリックすると、 配送先住所が攻撃者の住所に変更されるケースがあります。また、SNS で ログイン中に罠ページを閲覧した結果、意図しない投稿やフォローが行われる 被害も報告されています。セッションハイジャックと 組み合わされると、被害がさらに深刻化します。オンラインバンキングでは 送金操作に対する CSRF 対策が特に重要です。
防御手法
開発者側の対策として、CSRF トークン (ランダムな一意の値) をフォームに 埋め込み、リクエスト時に検証する方法が標準的です。SameSite Cookie 属性を 設定することで、クロスサイトからの Cookie 送信を制限できます。 ユーザー側では、重要な操作の後はログアウトする習慣をつけ、 不審なリンクをクリックしないことが基本です。パスつく.com で生成した 強力なパスワードでアカウントを保護し、多要素認証を 有効にすることで、万が一の被害を軽減できます。セキュア Web 開発の書籍 (Amazon)も参考になります。