よろずやIT
用語辞典

CSRF(クロスサイトリクエストフォージェリ)とは?仕組みと対策を図解

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

用語辞典のイラスト

結論: CSRF(シーサーフ)は、ログイン中の利用者のブラウザを使い、本人が意図しない操作を、サイトに送らせる攻撃です。ブラウザが、同じサイトへのリクエストにCookieを自動で付ける性質を悪用し、サイトに「本人の操作」と誤認させます。対策の基本は、CSRFトークンとSameSite属性で、重要な操作には再確認を入れます。

CSRFとは

CSRFは、Cross-Site Request Forgery(クロスサイト・リクエスト・フォージェリ)の略です。日本語では、「リクエスト強要」や「なりすましのリクエスト」とも呼ばれます。

たとえば、銀行サイトにログインしたまま、別のサイトを開いた時に、裏で、銀行サイトへ「送金する」というリクエストを送られてしまうような被害です。

仕組み

ログイン中の利用者が罠のページを開くと、サイトへ本人の操作に見えるリクエストが送られる流れを示した図解

  1. 利用者が、銀行サイトにログインしている(ブラウザに、ログインの印であるCookieが残っている)
  2. 利用者が、罠のページ(メールのリンクなどで誘導された別のサイト)を開く
  3. 罠のページが、利用者のブラウザに、「銀行サイトへ送金する」リクエストを送らせる
  4. ブラウザは、銀行サイトへのリクエストなので、ログイン中のCookieを自動で付けて送る
  5. 銀行サイトは、Cookieが正しいので、「本人の操作」と判断して、実行してしまう

利用者は、何も入力していません。画面上では、何も起きたように見えないこともあります。ログインの仕組みは、Cookieとはと、セッションとはをご覧ください。

起こりうる被害

被害 例
お金の操作 送金、購入、ポイントの移動
設定の変更 メールアドレスやパスワードの変更
投稿・操作 SNSへの投稿、データの削除
管理操作 管理者がログイン中に、ユーザーの追加や権限の変更

特に、管理者が狙われると、被害が大きくなります。

XSSとの違い

CSRF XSS
何をするか 利用者のブラウザから、サイトへ操作を送らせる 利用者のブラウザで、不正なスクリプトを動かす
必要なもの ログイン中であること、予測できるリクエスト サイトの出力処理の弱点
スクリプト 不要 必要

XSSの仕組みは、XSSとはで解説しています。XSSがあると、CSRFトークンも盗まれることがあるため、両方の対策が必要です。

対策

CSRFトークンによる確認と、SameSite属性、再確認などの対策を示した図解

① CSRFトークン(基本)

サーバーが、フォームごとに、**推測できないランダムな値(トークン)**を発行し、フォームに埋め込みます。送信された時に、トークンが一致するかを確認します。

<form method="POST" action="/transfer">
  <input type="hidden" name="csrf_token" value="ランダムな値">
  <!-- 金額などの入力欄 -->
  <button type="submit">送金する</button>
</form>

罠のページは、このトークンの値を知らないため、正しい値を付けて送れません。多くのフレームワークには、この仕組みが、標準で用意されています。

② SameSite属性(Cookie)

Cookieに、SameSite属性を付けると、別のサイトから送られたリクエストに、Cookieを付けるかを制御できます。

Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax

ブラウザによっては、指定がなくても、Laxに近い動きをすることがありますが、ブラウザの既定の動きに頼らず、サーバー側でも、トークンなどで対策します。

③ 重要な操作の前の、再確認

送金や、パスワードの変更など、重要な操作の前に、パスワードの再入力や、確認画面を入れます。罠のページからは、これらを通過できません。

④ 状態を変える操作は、GETで受け付けない

「参照するだけ」のGETリクエストで、データを変える処理を実行しないようにします。変更は、POSTなど、トークンの確認ができる方法で受け付けます。

CORSとの関係

**CORSは、CSRFの対策ではありません。**CORSは、ブラウザが、別のサイトのスクリプトに、レスポンスの読み取りを許可するかを決める仕組みです。CSRFは、レスポンスを読めなくても、リクエストを送れれば成立します。仕組みの違いは、CORSとはで解説しています。

利用者ができる備え

サイト側の対策が基本ですが、利用者も、次の備えで、リスクを減らせます。

まとめ

関連記事:XSSとは、Cookieとは、セッションとは、CORSとは、WAFとは

PRフロントエンド開発のためのセキュリティ入門 知らなかったでは済まされない脆弱性対策の必須知識 【電子書籍】[ 平野昌士 ]

フロントエンド開発のためのセキュリティ入門 知らなかったでは済まされない脆弱性対策の必須知識 【電子書籍】[ 平野昌士 ]

¥2,970

楽天で見る
SHAREXLINEはてブ

よくある質問

Q.CSRFとXSSは、何が違いますか?

A.XSSは、サイトの弱点を使い、利用者のブラウザで不正なスクリプトを動かす攻撃です。CSRFは、スクリプトを動かさなくても、ログイン中の利用者のブラウザから、サイトへ、本人が意図しないリクエストを送らせる攻撃です。XSSが成立すると、CSRFトークンが盗まれるなど、CSRFの対策も破られることがあります。

Q.CSRFトークンとは、何ですか?

A.サーバーが、フォームごとに発行する、推測できないランダムな値です。フォームに埋め込み、送信された時に、サーバーが値を照合します。罠のページは、この値を知らないため、正しい値を付けて送ることができません。

Q.SameSite属性とは、何ですか?

A.Cookieに付ける設定の1つで、ほかのサイトから送られたリクエストに、Cookieを付けるかどうかを制御します。LaxやStrictを指定すると、罠のページから送られたリクエストに、Cookieが付かなくなり、CSRFを防ぎやすくなります。ただし、ブラウザの既定の動きに頼らず、サーバー側でも、トークンなどで対策します。

Q.CORSの設定をしていれば、CSRFは防げますか?

A.防げません。CORSは、ブラウザが、別のサイトのスクリプトに、レスポンスの読み取りを許可するかを決める仕組みです。CSRFは、レスポンスを読めなくても、リクエストを送れれば成立するため、CORSでは対策になりません。

Q.利用者が、できる対策はありますか?

A.サイト側の対策が基本ですが、利用者は、使い終わったらログアウトする、不審なリンクを開かない、ブラウザを最新にする、といった備えで、リスクを減らせます。重要なサービスには、二段階認証も設定します。

関連記事

用語辞典用語解説

SQLインジェクションとは?仕組み・被害・対策をやさしく図解

SQLインジェクションとは、入力欄に不正なSQL文を紛れ込ませ、データベースを不正に操作する攻撃です。仕組み、被害の例、危険な書き方と安全な書き方(プレースホルダ)、対策を図解で解説します。

用語辞典用語解説

ブルートフォース攻撃(総当たり攻撃)とは?辞書攻撃・パスワードスプレーとの違いと対策

ブルートフォース攻撃は、パスワードの組み合わせを片っ端から試す攻撃です。辞書攻撃・パスワードスプレー・リスト型攻撃との違い、パスワードの長さで試す回数がどう変わるか、個人と企業ができる対策を、図で解説します。

用語辞典用語解説

SSO(シングルサインオン)とは?仕組みとメリット・リスクを図解

SSO(シングルサインオン)とは、1回のログインで、複数のサービスを使える仕組みです。認証の窓口(IdP)の役割、メリット、窓口が狙われるリスク、ソーシャルログインとの違いを、図解で解説します。

用語辞典用語解説

リスト型攻撃(クレデンシャルスタッフィング)とは?流出したIDとパスワードが他のサービスで悪用される仕組み

リスト型攻撃は、他のサービスで流出したIDとパスワードの組み合わせを使って、別のサービスに自動でログインを試みる攻撃です。パスワードの使い回しが危険な理由、個人と企業ができる対策を、たとえ話で解説します。

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。