「このフォーム、CSRF(シーサーフ)の対策は大丈夫?」
Webサイトの公開前、エンジニアさんが心配そうに聞いてきました。私は「シー……サーフ? なんだか、海でサーフィン(Surf)でもするのかな? 夏休みの計画の話?」と、のんきなことを考えていました。
とりあえず 「波に乗っていきましょう!」 と笑顔で答えましたが、周囲からは「……いや、勝手に操作を代行されちゃう攻撃のことだよ」と呆れられ、またしても「スポーツ脳」な勘違いに赤面する羽目に……。
これ、実はあなたが気づかないうちに、悪い人に「勝手にお願いごと」をされてしまう、とっても恐ろしい攻撃のことです。今回は、勝手にハンコを押される 「偽の委任状」 に例えて、その正体をやさしく解説します!
CSRFとは? 一言でいうと「あなたのフリをして『勝手にお願い(操作)』をさせる攻撃」
結論から言うと、CSRF(Cross-Site Request Forgery:クロスサイト・リクエスト・フォージェリ)とは、「Webサイトにログイン中のユーザーを騙して、本人の意図しない操作(購入、退会、設定変更など)を強制的に実行させる攻撃」 のことです。
街の 「手続き」 に例えてみましょう。
- 健全なサイト:あなたが自分の意志で「この商品を買います」とハンコを押す場所。
- CSRF(攻撃):「悪い人が作った『偽の委任状』」。
- 被害:あなたが別の怪しいサイト(罠)を見た瞬間、裏側で 『私はこの商品を100個買います!』 という委任状が勝手に作成され、あなたがログインしている通販サイトへ送られてしまう。
通販サイト側は、あなたが今まさにログイン中(本人確認済み)なので、「あ、本人からのお願いだね!」と信じてしまい、注文を受け付けてしまいます。
あなたは「何もしていない」つもりでも、裏側で勝手に「代筆(代行)」されてしまうのが、CSRFの怖さです。
ビジネスの現場でCSRFという言葉が出る場面
Webサービスの開発や、セキュリティ診断のシーンで頻繁に登場します。
1. 「トークン(合言葉)を発行して、CSRF攻撃を防ごう」
意味:
「委任状が偽物じゃないことを証明するために、一回使い切りの『秘密の合言葉』をメモに添えるようにして、悪い人が勝手に代筆できないように守りを固めよう」ということです。
2. 「重要な操作の前に再ログインを求めて、CSRFの連鎖を断ち切ろう」
意味:
「勝手にお願い(操作)されないように、大事な時だけは『もう一度、本人の顔を見せて(パスワード入力して)』と確認することで、偽の委任状を無効にしよう」ということです。
3. 「掲示板への勝手な書き込みも、CSRFの手口の一つだね」
意味:
「自分が書いていないのに、知らないうちに自分の名前で『変な悪口』が投稿されていたら、それは罠サイトを踏んで勝手に操作させられた可能性があるよ」ということです。
XSSとCSRFの違い
よく似た名前の「Webアプリ二大攻撃」を比較しました。
| 比較ポイント | XSS (クロスサイトスクリプティング) | CSRF (シーサーフ) |
|---|---|---|
| 狙い | あなたの 「情報(Cookieなど)」 を盗む | あなたの 「権限」 を悪用する |
| 動作 | サイトに「悪いプログラム」を埋め込む | サイトへ「勝手なリクエスト」を送る |
| たとえ話 | 偽の案内板でお客を騙す | 偽の委任状で勝手にハンコを押す |
「情報を盗む」のがXSS、「勝手にやらせる」のがCSRF、と覚えましょう!
まとめ
この記事のポイントは次のとおりです。
- CSRFは、ログイン中のユーザーに「勝手な操作」をさせる攻撃
- パスワード変更や商品購入などが、本人の知らないうちに実行される
- 「ワンタイムトークン」などの対策で、偽のお願いを防ぐことが大事
今すぐできる確認方法
あなたが「勝手な代筆」をされないために、以下のことを意識しましょう。
- こまめにログアウト: 使い終わったサイトは、開きっぱなしにせずログアウトする。扉(権限)を閉めておけば、偽の委任状も通りません。
- 怪しいリンクを踏まない: 「偽の委任状」は、怪しいメールやサイトの裏側に隠されています。
- ブラウザの更新: 最新のブラウザは、この「勝手な代筆」を防ぐための基本的なガード機能(SameSite属性など)をどんどん強化してくれています。
「CSRF」という言葉を知るだけで、インターネットが「単なる画面」ではなく、あなたの「権限(ハンコ)」を狙う巧妙な罠が潜んでいるかもしれない、少しだけ背筋が伸びる場所に感じられませんか?