CSRF とは何ですか。どう防ぎますか

ログイン中の人のブラウザから、本人の知らない要求を勝手に送らせる攻撃、と答える問い。トークンと SameSite の Cookie で守ることを話します。

こう聞かれます

  • 「CSRF とは何ですか。どう防ぎますか」
  • 「ログイン中の人が別のサイトを開いただけで、こちらのサイトの設定が変わってしまいました。何が起きていますか」
  • 「XSS と CSRF の違いは何ですか」

面接官が見ている点

  • ブラウザが Cookie を自動で付けて送る、という前提から説明できるか
  • 守りの中心にトークンを挙げ、SameSite の Cookie を合わせて使えるか
  • データを変える操作を GET で受けない、という前提を押さえているか

短い答え

  • CSRF は、ログイン中の人が別のサイトを開いたときに、本人の知らない要求をこちらのサイトへ勝手に送らせる攻撃です。
  • ブラウザがログインの Cookie を自動で付けて送るので、サーバーから見ると本人の操作と見分けがつかないのが原因です。
  • 防ぐには、自分の画面にだけ埋めたトークンを要求と一緒に送らせてサーバーで照らし、Cookie には SameSite を付けます。

少し詳しい答え

なぜ起きるか

ログインの状態を Cookie で保つサイトでは、ブラウザがそのサイトあての要求に Cookie を付けて送ります。ほかのサイトのページから送らせた要求にも付くことがあるため、サーバーは「本人が自分の画面から押した」と勘違いします。

トークンで照らす

サーバーは推測できないトークンを作り、自分のフォームや画面に埋めます。データを変える要求が来たら、そのトークンが正しいかを照らします。ほかのサイトのページはこのトークンを知らないので、送らせた要求は断られます。多くのフレームワークは、この仕組みを用意しています。

SameSite の Cookie

Cookie に SameSite=Lax や SameSite=Strict を付けると、ほかのサイトから送らせた要求に Cookie が付く場面を減らせます。ただし、同じサイトの扱いになる別のサブドメインからの要求は防げないなどの限りがあるので、トークンと合わせて使います。

前提として守ること

データを変える操作は GET で受けません。GET はリンクや画像の読み込みだけで送られるからです。また、XSS の穴があるとトークンも読まれてしまうので、CSRF の守りは XSS の守りがある前提で効きます。

作った物と結ぶなら、たとえば「プロフィールを直す機能で、フレームワークの CSRF の守りを有効にし、トークンを付けずに送った要求が断られることを確かめた」のように話します。

よくある間違い

  • 「POST にすれば防げる」と言うほかのサイトのフォームからも POST は送れます。トークンで照らします
  • 「SameSite を付ければ完全」と言う防げない場面があるので、トークンと合わせて使います
  • XSS と同じ物として話す XSS は相手の画面でスクリプトを動かす穴、CSRF は本人の権限で要求を送らせる攻撃です

深掘りの問い

  • 「トークンを URL に入れてはいけないのはなぜですか」 URL は履歴やログ、ほかのサイトへの参照元の情報に残って漏れやすいから、と答えます
  • 「Authorization ヘッダーにトークンを入れる API では、CSRF はどう変わりますか」 ブラウザが自動で付けないので、CSRF は起きにくくなる、と答えます。代わりに、トークンの置き場が XSS で読まれないかを考えます
  • 「SameSite の Strict と Lax の違いは」 Strict はほかのサイトからの要求には Cookie を付けません。Lax はほかのサイトのリンクから GET で移ってきたときだけ付ける、と答えます

確認日 2026年10月23日

技術面接問題の一覧へ戻る