TL;DR

信頼されたユーザになりすまし、Web サイトに不正なコマンドを送る攻撃。

仕組み

OWASP によると、CSRF はログイン中のユーザに、望んでいない操作を Web アプリケーション上で実行させる攻撃である。ブラウザは、サイトへのリクエストに Cookie などそのサイトの認証情報を自動で付けるので、ユーザがログインしていると、サーバは偽のリクエストと正規のリクエストを区別できない。攻撃者はメールやチャットで悪意のあるリンクを送るなど、ソーシャルエンジニアリングを使うことが多い。

狙われるのは、メールアドレスやパスワードの変更、購入など、状態を変えるリクエストである。攻撃者はレスポンスを見られないので、データを盗むことは目的にならない。

たとえば、URL に悪意のある引数を含めたリンクを、別のページに埋め込む。

<img src="https://www.example.com/index.php?action=delete&id=123" />

この <img> が https://www.example.com の外のページにあっても、https://www.example.com で何らかの権限を持つユーザがそのページを開くと、気づかないうちに https://www.example.com への操作を実行してしまう。

注意点

対策には、次のようなものがある。

  • RESTful な API にする
  • CSRF トークンを使う

OWASP は、効かない対策も挙げている。ブラウザはすべての Cookie をリクエストに付けるので、秘密の Cookie を使っても防げない。攻撃者は偽の POST フォームを送れるので、POST だけを受け付けるようにしても防げない。Referer ヘッダは偽装されたり欠けたりするので、チェックしても確実ではない。HTTPS にするだけでも防げない。

関連

出典