0Pricing
Cyber Security Academy · レッスン

クロスサイトリクエストフォージェリ(CSRF)

CSRF攻撃が認証済みリクエストを偽造する仕組みと、CSRFトークンおよびSameSite Cookieによる防御方法を学びます。

「クロスサイトリクエストフォージェリ(CSRF)」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。

CSRFとは何ですか

クロスサイトリクエストフォージェリ(CSRF)は、認証済みユーザーのブラウザーをだまして、Webアプリケーションに対する未承認のリクエストを送信させます。ブラウザーはリクエストにCookieを自動的に付加するため、追加の対策がなければ、サーバーは正当なリクエストと偽造リクエストを区別できません。

CSRFの仕組み

シナリオ:

  1. 被害者がbank.comにログインしている(ブラウザーにセッションCookieがある)
  2. 被害者が、次の内容を含む攻撃者のページにアクセスする:<img src="https://bank.com/transfer?to=attacker&amount=1000">
  3. ブラウザーがbank.comのCookieを付けてGETリクエストを送信する
  4. 銀行が送金を処理する

POSTリクエストに対するCSRF

POSTによるCSRFにはフォームが必要です:

<form action="https://bank.com/transfer" method="POST" id="f">
  <input name="to" value="attacker">
  <input name="amount" value="1000">
</form>
<script>document.getElementById("f").submit()</script>

CSRFトークン

主な防御策はCSRFトークンです。フォームに埋め込む、セッションごと(またはリクエストごと)に生成されたランダムで秘密の値です。サーバーは、状態を変更するすべてのリクエストでトークンを検証します。別のドメイン上の攻撃者は、同一オリジンポリシーによってトークンを読み取れません。

SameSite Cookie属性

SameSite=Strict:クロスサイトリクエストではCookieを一切送信しません。SameSite=Lax:安全なトップレベルナビゲーション(リンク)ではCookieを送信しますが、他サイトからのPOSTでは送信しません。最新のブラウザーではデフォルトがLaxであり、CSRFのリスクを大幅に低減します。

Double Submit Cookieパターン

サーバー側でのトークン保存に代わる方法です。ランダムなCSRF Cookieを設定し、リクエストパラメータとしても送信するよう要求します。攻撃者はCookieを読み取れないため(同一オリジン)、フォームデータ内の値と一致させることができません。

カスタムリクエストヘッダー

AJAXリクエストでは、カスタムヘッダー(例:X-Requested-With: XMLHttpRequest)を必須にするとCSRF対策になります。ブラウザーは、クロスオリジンのスクリプトが任意のヘッダーを設定するのをブロックするためです(CORSによって強制されます)。

CSRFトークンだけでは不十分な場合

CSRFトークンは、次の場合に機能しません:

  • XSSが存在する場合 — 攻撃者はJavaScriptでトークンを読み取れます
  • トークンがURL(Refererヘッダー)に漏えいした場合
  • トークンが予測可能または再利用されている場合
  • 攻撃者のオリジンを許可するようCORSが誤設定されている場合

CSRFのテスト

テスト手順:

  1. 状態を変更するリクエスト(POST、PUT、DELETE)を特定する
  2. CSRFトークンを削除または変更して再送信する
  3. クロスオリジンのフォーム送信を作成し、成功するか確認する
  4. セッションCookieのSameSite属性を確認する

APIにおけるCSRF

JSONを使用するREST APIは、次の条件を満たす場合、CSRFの対象外になることが多いです:

  • Content-Type: application/jsonを要求する(HTMLフォームではこれを設定できません)
  • トークンベース認証を使用する(CookieではなくAuthorizationヘッダーを使用する)

ただし、Cookieを受け入れるAPIでは、CSRF対策を実装する必要があります。

現代のCSRF事情

Chrome、Firefox、SafariではSameSite=Laxがデフォルトになっているため、従来型のCSRF攻撃の多くがブロックされます。ただし、サブドメイン攻撃や特定のナビゲーションパターンでは、Laxを回避できる場合があります。堅牢な防御のため、SameSiteとCSRFトークンを組み合わせてください。

理解度チェック:CSRF

WebアプリケーションにおけるCSRF攻撃への主な防御策は何ですか?

レッスンのまとめ

CSRFは、ブラウザーがCookieを自動的に付加する仕組みを悪用し、悪意のあるサイトから認証済みリクエストを偽造します。主な防御策は、サーバー側で検証するCSRFトークンです。副次的な対策として、SameSite=Strict/Lax Cookie属性があります。Cookieではなくヘッダー内のトークン認証を使用するAPIは、自然にCSRF耐性を備えています。防御策を組み合わせてください。XSSが存在するとCSRFトークンを回避される可能性があります。

よくある質問

「クロスサイトリクエストフォージェリ(CSRF)」レッスンは無料ですか?

はい。「クロスサイトリクエストフォージェリ(CSRF)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。

「クロスサイトリクエストフォージェリ(CSRF)」で何を学びますか?

CSRF攻撃が認証済みリクエストを偽造する仕組みと、CSRFトークンおよびSameSite Cookieによる防御方法を学びます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cyber Security Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「クロスサイトリクエストフォージェリ(CSRF)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCyber Security Academyレッスンでコードを書いて実行できますか?

はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. SQLインジェクション:仕組みと発生理由
  2. クロスサイトスクリプティング(XSS)
  3. クロスサイトリクエストフォージェリ(CSRF)
  4. セキュリティ設定ミスと公開サービス
← Cyber Security Academyに戻る