テーマ:CSRF(クロスサイトリクエストフォージェリ)の原理と対策
1. はじめに
Webサイトを運営・制作する上で、さまざまな攻撃手法への対策は極めて重要です。フィッシング、偽造サイト等で使われるCSRFは、ユーザーの意図に反して、ログイン中のサイトに対して不正なリクエストを送信させる攻撃であり、特に金融や証券取引といった高リスクな業務システムにとって大きな脅威です。本資料では、CSRFの基本概念、不正購入事例(証券会社での不正な商品購入)の流れ、及びその対策について技術的な観点から解説します。
2. CSRF(クロスサイトリクエストフォージェリ)とは
CSRFは、認証済みのユーザーのブラウザを利用して、ユーザーの意図しないリクエストを強制的に送信させる攻撃手法です。
たとえば、ユーザーが普段利用している証券会社のサイトにログイン状態のまま、攻撃者が用意した偽ページを訪れることで、意図しない取引や資金移動、商品の購入などが実行されるリスクがあります。
3. CSRFの発生原理と攻撃事例
3.1 発生原理
CSRF攻撃では、ユーザーのブラウザが保有するセッション情報(クッキーなど)を利用し、被害サイトに対して正当なリクエストが送信されます。
具体的には、以下の流れが考えられます:
- ユーザーの認証状態:証券会社サイトにログインしている状態では、ユーザーのブラウザは有効なセッション情報(クッキー)を保持しています。
- 攻撃用の偽ページ誘導:攻撃者は、悪意のある偽サイトやスクリプトを用意し、ユーザーをそのページに誘導します。
- 不正なリクエストの自動送信:偽ページには、攻撃対象サイトへのリクエストを自動で送信するHTMLフォームなどが埋め込まれており、ユーザーが何も操作しなくてもリクエストが実行されます。

3.2 攻撃事例:証券会社での不正購入
実際の攻撃例として、以下のようなケースを考えます。
ユーザーが、悪意のある偽サイトを訪れた結果、意図せずして証券会社の取引が行われ、不正に高額な商品の購入が実施される事例です。
攻撃時のHTML例
以下は、攻撃者が用意した不正リクエストの例です。
ユーザーが詐欺メール等のリンクからこのリクエストを送信した場合、証券会社側で取引処理が行われ、不正に以下の内容の購入が実施されます。
<form action=”http://example.com/transfer.php” method=”POST”>
<input type=”hidden” name=”銘柄コード” value=”XXXXXX”>
<input type=”hidden” name=”金額” value=”10000000″>
<input type=”submit” value=”購入”>
</form>
上記のフォームは、ユーザーが自ら操作したわけではないにも関わらず、ユーザーのブラウザ上で自動的に送信されます。その結果、攻撃者はユーザーの認証状態を利用して、不正に証券取引を成立させることが可能となります。
4. CSRF対策
CSRF攻撃への対策は、サイト運営者にとって極めて重要です。以下の対策により、不正なリクエストの実行を防止します。
4.1 CSRFトークン(nonce)の導入
- 概要
各リクエストに対してランダムなトークンを生成し、フォームやリクエストパラメータに含める方法です。
サーバー側はリクエストに含まれるトークンが正当なものであるかを検証し、一致しない場合はリクエストを拒否します。 - 実装ポイント
- ユーザーセッションごとに一意のトークンを発行
- トークンはフォーム送信時に埋め込み、JavaScriptやCookieと連携して運用
4.3 リファラーチェックとホスト検証
- 概要
サーバー側で、リクエストヘッダのRefererやOriginをチェックし、正当なドメインからのリクエストであるかを確認します。
不正なリクエストの場合は、処理を中断または拒否する実装を行います。
5. まとめ
CSRFは、ユーザーの認証状態を悪用した不正なリクエストにより、証券会社などの重要なシステムで不正な取引が発生する可能性がある重大な脆弱性です。
Web制作やシステム運用の段階から、これらの対策を講じ、定期的なセキュリティ診断を実施することで、CSRF攻撃による被害リスクを大幅に低減させることが可能です。