CSRFは、ログイン中の利用者のブラウザに、本人が意図しないリクエストを送らせる攻撃。
利用者が本物のサービスにログインしている状態を悪用します。
CSRFの基本
CSRFは「Cross Site Request Forgery」の略です。日本語では「リクエストの偽造」と説明されることがあります。
ポイントは、攻撃者が直接ログインするのではなく、ログイン中の利用者のブラウザを使うことです。ブラウザにはログイン用のCookieがあるため、サービス側から見ると「本人から来たリクエスト」に見えてしまう場合があります。
本物のサービスにログインしていて、ブラウザにCookieがある。
悪意あるページが、裏で本物のサービス宛ての依頼を作る。
ブラウザがCookie付きでリクエストを送ってしまう。
起きると困る操作
CSRFで特に危ないのは、データを見るだけではなく、状態を変える操作です。メールアドレス変更、パスワード変更、配送先変更、投稿、削除、送金のような操作が例になります。
「リンクを踏んだだけで勝手に退会する」のような作りは危険です。大事な操作は、本人が本物の画面から送ったことをサーバー側で確認する必要があります。
基本の対策
代表的な対策はCSRFトークンです。本物のフォームだけに予測しにくい値を入れておき、送信時にサーバーで照合します。
本物の画面だけが持つ値を送信し、サーバー側で照合する。
別サイトからのリクエストにCookieを付けにくくする。
送金や退会などは、パスワード再入力や確認画面を挟む。
XSSとの違い
XSSは「ページの中でスクリプトが動く」問題です。CSRFは「ログイン中のブラウザに勝手なリクエストを送らせる」問題です。
どちらも利用者のブラウザが関わりますが、狙い方が違います。XSSは画面に混ざったコード、CSRFはログイン状態を利用したリクエスト、と分けて覚えると整理しやすいです。
XSSはコードを動かす攻撃。CSRFは本人のブラウザに依頼を送らせる攻撃です。