Web脆弱性<クロスサイトリクエストフォージェリ(CSRF)>

セキュリティ対策

クロスサイトリクエストフォージェリ(CSRF)攻撃は、認証されたユーザーのWebブラウザを悪用して、攻撃者が意図的に偽造したリクエストを送信させ、Webアプリケーションで不正な操作を行わせる攻撃方法です。

攻撃例

  1. パラメータ改ざん
    • 攻撃者が不正な値を持つURLを作成し、ユーザにそのURLを開かせる
    • 例: https://bank.example.com/transfer?amount=1000&to=攻撃者口座
  2. HTMLフォームの悪用
    • 攻撃者がHTMLフォームを埋め込んだ悪意のあるウェブサイトを作成する
    • フォームはCSRF攻撃対象サイトへの不正なリクエストを送信する
    • 自動的に送信されるため、ユーザーは気づかない
  3. JSONハイジャック
    • JSONデータを返すエンドポイントに対してCSRF攻撃が可能
    • 悪意のある <script> タグでリソースを読み込ませる

防御策

  1. CSRFTokenの使用
    • サーバー側で発行した不可予測なトークンを、リクエストごとに送信
    • サーバー側でトークンを検証し、不正なリクエストを防ぐ
  2. Refererチェック
    • リクエストのRefererヘッダーを検査して、信頼できるドメインからのリクエストのみを許可
    • Refererはfalseにできないため、大まかな対策にはなるがすべてのケースをカバーできない
  3. SameSite Cookie属性
    • Cookieの SameSite 属性を設定し、クロスサイトリクエストでCookieが送信されないようにする
    • SameSite=Strict はクロスサイト全てをブロック
    • SameSite=Lax は安全なメソッド(GET, HEAD, OPTIONS, TRACE)のみ許可
  4. リクエストヘッダーの検証
    • Origin ヘッダーや Referer ヘッダーを検証し、信頼できるドメインからのリクエストのみを許可
  5. ログイン画面の分離
    • ログイン画面を別サブドメインで提供し、トップページと分離
    • ログイン画面が別サブドメインならクロスサイトでのCookieなどが送られない
  6. ログアウト時のセッションリセット
    • セッションを確実に破棄し、再利用を防ぐ
  7. 再認証
    • 重要な処理の前に再度認証を求め、ユーザーが意図した操作かを確認

これらの対策を適切に組み合わせ実装することで、CSRFリスクを大幅に低減できます。定期的な脆弱性テストと最新の脅威への対応も重要です。

タイトルとURLをコピーしました