top of page

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

CSRFは、Webアプリケーションでセッションが維持されているユーザーが、意図せず攻撃者の用意したリクエストを送信し、不正な操作が実行される攻撃です。攻撃者は、正規ユーザーのブラウザを通してリクエストを送信させるため、サーバー側では正当なユーザーからのリクエストとして認識され、不正な操作が行われます。

例:CSRF攻撃の流れ

  1. ユーザーが正規のサイトにログイン ユーザーが、正規のWebサイトにログインし、セッションが有効な状態でサービスを利用しています。

  2. 攻撃者が悪意あるリクエストを用意 攻撃者は、ユーザーに悪意のあるサイトやメール、リンクを経由して、偽のリクエストを送り込む仕組みを作成します。

  3. ユーザーが攻撃者のサイトにアクセス ユーザーが攻撃者のサイトにアクセスすると、背後で偽のリクエストが送信され、ユーザーのセッション情報を使ってサーバーが不正リクエストを受け入れてしまいます。

  4. 不正な操作が実行される 結果として、ユーザーのアカウント設定の変更、資金の送金、不正な投稿などが行われてしまいます。



CSRF攻撃のリスク

CSRF攻撃は、ユーザーの権限を悪用して不正操作を行うため、重大なリスクをもたらします。以下は、CSRF攻撃がもたらす具体的なリスクです。

1. アカウントの不正操作

ユーザーのアカウント情報(パスワード、メールアドレス、設定など)が不正に変更される可能性があります。例えば、攻撃者がユーザーのパスワードを変更し、アカウントを乗っ取ることができます。

2. 金銭的被害

銀行やオンラインショップのアプリケーションでCSRF攻撃が成功すると、攻撃者はユーザーになりすまして不正な取引や送金を行うことができます。これにより、ユーザーに金銭的な被害が発生します。

3. 不正な投稿やメッセージの送信

ソーシャルメディアやフォーラムなどのWebサービスで、攻撃者が不正な投稿やメッセージをユーザーになりすまして送信することが可能になります。これにより、ユーザーの信頼性が損なわれる可能性があります。



CSRF攻撃の防止策

CSRF攻撃を防ぐためには、Webアプリケーションでいくつかのセキュリティ対策を講じることが重要です。以下は、CSRF攻撃を効果的に防止するための主な対策です。

1. CSRFトークンの使用

CSRFトークン(ワンタイムトークン)は、リクエストに埋め込まれるユニークな識別子です。これをユーザーのセッションに紐付けることで、リクエストが正当なユーザーからのものであることを確認できます。トークンが一致しない場合は、リクエストを拒否する仕組みです。

例:CSRFトークンの実装(擬似コード)

<form method="POST" action="/submit"> 
 <input type="hidden" name="csrf_token" value="abc123"> 
  <!-- トークンを埋め込む --> 
 <button type="submit">送信</button> 
</form>

サーバー側でトークンを検証し、一致しないリクエストは不正とみなして拒否します。

def validate_csrf(request): 
 token_from_request = request.POST.get("csrf_token") 
 token_from_session = request.session.get("csrf_token")  
 if token_from_request != token_from_session: 
  return False 
 return True

2. SameSite Cookie属性の設定

SameSite属性をCookieに設定することで、クロスサイトリクエスト時にCookieが送信されることを防止します。これにより、攻撃者のサイトから発信されたリクエストでは、セッション情報が含まれず、不正な操作が行われにくくなります。

例:SameSite属性の設定(HTTPヘッダー)

Set-Cookie: sessionid=xyz123; SameSite=Lax; Secure; HttpOnly
  • Lax:基本的なクロスサイトリクエストに対してCookieを送信しない。

  • Strict:すべてのクロスサイトリクエストに対してCookieを送信しない。

3. Refererヘッダーの検証

サーバー側でRefererヘッダーを確認し、正しいドメインからのリクエストのみを受け付けるようにします。これにより、外部のドメインからの不正なリクエストを検出し、拒否できます。

ただし、Refererヘッダーはユーザーの設定やプロキシの影響で必ずしも信頼できるとは限らないため、他の対策と併用するのが望ましいです。

4. 認証が必要な操作をPOSTリクエストに限定

GETリクエストは、CSRF攻撃に利用されやすいため、重要な操作や状態変更を伴うリクエストはPOSTリクエストに限定することが推奨されます。これにより、ユーザーのアクションが明示的であることを求め、不正なリクエストを防ぎます。



まとめ

クロスサイトリクエストフォージェリー(CSRF)は、ユーザーの権限を悪用して不正な操作を実行させる攻撃です。セッションの維持が必要なWebアプリケーションでは、CSRFトークンの使用やSameSite属性の設定などの対策を講じることで、攻撃のリスクを軽減できます。また、重要な操作をPOSTリクエストに限定することも効果的です。

これらの対策を実施して、CSRF攻撃からアプリケーションとユーザーを守りましょう。

サービスのお問い合わせはこちら!

​関連記事

​関連記事

bottom of page