クロスサイトリクエストフォージェリ(Cross-Site Request Forgery、CSRF)は、攻撃者がユーザーの信頼を悪用し、ユーザーがログイン済みの状態で攻撃者の指示に従って不正なリクエストを送信させる攻撃手法です。攻撃者はユーザーに対して特定のウェブページを訪れるよう誘導し、そのウェブページ内には攻撃者が作成した不正なリクエストが含まれています。
CSRF攻撃の手順は以下のようになります。
-
攻撃者は悪意のあるウェブページを作成し、その中に不正なリクエスト(たとえば、資金の送金や設定の変更など)を送信するスクリプトを埋め込みます。
-
攻撃者はユーザーに対して、誘導リンクやメールなどを通じて悪意のあるウェブページを訪れるよう誘導します。
-
ユーザーが攻撃者のウェブページを訪れると、不正なリクエストがユーザーのブラウザから目標のウェブアプリケーションに送信されます。
-
目標のウェブアプリケーションは、ユーザーがログイン済みであることを確認し、リクエストを処理します。攻撃者の意図した不正な操作が実行されてしまいます。
CSRF攻撃を防ぐためには、以下の対策が一般的に取られます。
-
CSRFトークンの使用: 目標のウェブアプリケーションは、ユーザーごとに一意のトークンを生成し、リクエストに含めるよう要求します。攻撃者のウェブページには正しいトークンを知る手段がないため、不正なリクエストはブロックされます。
-
SameSite属性の設定: 目標のウェブアプリケーションは、CookieにSameSite属性を設定することで、他ドメインからのリクエストの送信を制限します。SameSite属性がStrictまたはLaxに設定されている場合、クロスサイトリクエストはブロックされます。
-
リファラーチェックの有効化: 目標のウェブアプリケーションは、リクエストのRefererヘッダーを検証し、同一オリジンからのリクエストであることを確認します。異なるオリジンからのリクエストは拒否されます。
-
ユーザー教育: ユーザーに対して、信頼できるウェブサイトのみを訪れるよう促し、不審なリンクやメールのクリックに注意するよう啓発します。
これらの対策を組み合わせて実施することで、CSRF攻撃のリスクを軽減することができます。また、ウェブアプリケーションの開発時には、セキュリティを意識した設計とコーディングを行うことも重要です。