Shikata Ga Nai

Private? There is no such things.

CSRFとは?攻撃者がユーザーになりすますクロスサイトリクエストフォージェリの仕組み

Hello there, ('ω')ノ

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

CSRF(Cross-Site Request Forgery) とは、 ユーザーが意図しない操作を、攻撃者が間接的に実行させる Webアプリケーションの脆弱性です。

🔍 別名:セッションライディング、ワンクリック攻撃とも呼ばれます。


🎯 どうやって起こるのか?

CSRFの本質は:

「ユーザーの認証済み状態を利用して、第三者が勝手に操作させる」 ことです。


✅ 例:イメージしやすい攻撃シナリオ

  1. ユーザーが「銀行のサイト」にログイン済み(セッションクッキー保持)
  2. 攻撃者が用意した悪意のあるページにアクセスする
  3. ページ内に次のようなリクエストが自動送信される:
<img src="https://bank.com/transfer?amount=10000&to=attacker" />
  1. ユーザーのセッションが使われて銀行がリクエストを受け入れてしまう

🛡️ 同一生成元ポリシー(Same-Origin Policy)とは?

  • Webブラウザは、異なるオリジン(ドメイン・ポート・プロトコル)からの JavaScriptによる読み取りを制限しています(これがSame-Origin Policy)

  • しかし、リクエストの送信自体は制限されていないため、 攻撃者が送ったリクエストはユーザーのセッションクッキー付きで送られることになります。

→ これが**「同一オリジンポリシーの部分的回避」**と呼ばれる理由です。


🔓 攻撃条件が成立するには?

条件 内容
✅ 被害者がログイン済み セッション有効中(Cookie保持)
✅ 脆弱な機能がGET/POST等で動作 リクエストで状態変更操作ができる(例:送金、設定変更)
✅ CSRFトークンなどの防御がない 対策がないとリクエストがそのまま通る

🎯 まとめ:CSRFは「ユーザーのふりをする」攻撃

  • 被害者が自分の意思で送ったように見せかけてリクエストを送る
  • 攻撃者がログインセッションを乗っ取るのではなく、悪用する

✅ 対策(概要)

対策 説明
CSRFトークン ユニークな秘密値をフォーム等に埋め込み、サーバーで検証
SameSite Cookie SameSite=Strict or Lax で第三者からのリクエスト拒否
Referer / Origin ヘッダー検証 正しい送信元かチェック
認証情報を要求 状態変更操作には再認証やCAPTCHAを求める

「CSRFはユーザーを攻撃者の手先にする攻撃」 この構造を理解することで、脆弱性診断・設計防御の質が一段上がります。

Best regards, (^^ゞ