クロスサイトリクエストフォージェリ(CSRF)とは?
2025年02月24日 9:22
「気づいたら勝手に送金されていた…」「アカウントが乗っ取られた!」
こんな怖い話、聞いたことありませんか?
それ、もしかすると クロスサイトリクエストフォージェリ(CSRF) が原因かもしれません。
CSRFは、攻撃者がユーザーの認証済みセッションを悪用し、意図しないリクエストを送信させる攻撃のことです。
今回は Node.js を使った具体例を交えて、CSRFの仕組みと対策をわかりやすく解説します。
CSRFの基本的な流れは以下のようになります。
ユーザーが正規サイトにログイン
攻撃者が悪意のあるページを作成
ユーザーが攻撃者のページにアクセス
ユーザーのセッションを利用して、意図しないリクエストが送信される
例えば、攻撃者のページが以下のようなコードを含んでいた場合、ユーザーは気づかないうちに自分の銀行口座からお金を送金してしまいます。
このリクエストは すでにログイン済みのセッションを利用して 実行されるため、送金が完了してしまうのです。
Node.jsでExpressを使用した簡単なWebアプリを考えてみましょう。
以下のように、ユーザーが送金するためのエンドポイントがあったとします。
このエンドポイントにはCSRFの脆弱性があります。攻撃者がユーザーの知らぬ間に以下のようなHTMLを使って自動送金させることができます。
このHTMLを攻撃者のWebサイトに埋め込んでおくことで、
ユーザーがサイトを訪問した瞬間に勝手に送金が実行される のです。
では、どのようにしてCSRF攻撃を防げばよいのでしょうか?
最も一般的な対策は CSRFトークン(CSRF Token) を使用することです。
このトークンは、フォーム送信時にサーバー側で検証されるため、攻撃者が勝手にリクエストを送ることができなくなります。
このようにすると、
という流れでCSRF攻撃を防ぐことができます。
最近のブラウザでは、SameSite属性 を適切に設定することでCSRFを軽減できます。
これにより、異なるサイトからのリクエストでセッションが送信されなくなり、CSRF攻撃を防げます。
CSRFは一見すると地味な攻撃ですが、実際に被害を受けると甚大な損害を被る可能性があります。
しっかりとした対策を行い、安全なWebアプリケーションを構築しましょう!
[cv:issue_marketplace]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。