【しーえすあーるえふ】

CSRF とは?

最終更新:
💡 本人のログイン状態を借りて、勝手なお願いを送らせる攻撃

ログイン状態などを悪用し、利用者のブラウザーに意図しない操作のリクエストを送らせる攻撃。Cookieが送られる条件やサーバー側の検証に左右され、CSRFトークンや送信元の確認などで対策します。

📌 このページのポイント
CSRF:本人のブラウザーを悪用罠のページ操作を仕掛けるブラウザーログイン状態あり意図しない要求正規サービス本人が望んだ操作か、検証が必要対策:トークン・送信元の検証SameSiteや、状態変更の設計も確認
Cookieが送られ、サービス側の対策が不十分な場合の例。攻撃者がサービスへ直接ログインする流れではありません。
ひよこ ひよこ
CSRFって、何をされる攻撃なの?
ペンギン先生 ペンギン先生
ログインしているサービスへ、本人が意図しない設定変更などのリクエストをブラウザーに送らせる攻撃だよ。例えば罠のページをきっかけに、対応が不十分なサービスで操作が行われる場面があるんだ。Cookieを盗まなくても成立する場合があるよ。
ひよこ ひよこ
本人が操作していないのに、なぜ受け付けるの?
ペンギン先生 ペンギン先生
ブラウザーが送信条件に合うCookieを自動で付けるため、サーバーがログイン状態だけを見て処理すると、本人の希望した操作か区別できないんだ。ただし別サイトからのリクエストに、いつでもCookieが付くわけではないよ。
ひよこ ひよこ
CSRFトークンは、どう役立つの?
ペンギン先生 ペンギン先生
サーバーが用意した予測しにくい値を、操作のリクエストに含め、サーバー側で検証するんだ。値がない・一致しない場合は拒否するよ。フォームに置くだけでは足りないので、フレームワークの標準機能があれば、その設定と動作を確認して使おう。
ひよこ ひよこ
SameSite=Laxなら、別サイトから送られない?
ペンギン先生 ペンギン先生
すべてを止める設定ではないよ。例えば別サイトのリンクから開く最上位のGETリクエストにはCookieが付く場合がある。GETで設定変更などを行わない設計が大切だね。同じサイトと同じオリジンも別なので、SameSiteだけで万全と考えず、トークンや送信元の確認などを検討しよう。
ひよこ ひよこ
XSSとの違いは何?
ペンギン先生 ペンギン先生
XSSは、信頼されるページの文脈で悪意あるスクリプトを実行させる問題だよ。CSRFは、本人のブラウザーから意図しないリクエストを送らせる問題。XSSは情報を盗むだけではなく、CSRF対策を回避する操作にも使われ得るので、両方を対策する必要があるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CSRF」って出てきたら「ログイン中のブラウザーに、勝手な操作を頼ませる攻撃」と思えばだいたいOK!
📖 おまけ:英語の意味
「Cross-Site Request Forgery」 = サイトをまたぐリクエストの偽造
💬 Forgeryは偽造という意味だよ。本人の意図とは違う要求を、本人のブラウザーから送らせる攻撃を表すんだ。

参考資料

← 用語集にもどる