CSRFとは
CSRF(シーサーフ)とはクロスサイト・リクエスト・フォージュリという脆弱性の略称である。
攻撃者が悪意のある罠を用意し利用者が踏んでしまうことで、利用者の意図しないリクエストが実行させられてしまう脆弱性である。
ログイン後に利用可能なサービスを攻撃者が悪用することにつながる。
脆弱性の原理
主に、リクエストをしたのが本来の利用者本人であるかの確認が甘いことに起因した脆弱性である。
以下の3つの要素を同時に満たす場合、脆弱性が存在する。
- 本人認証のためのトークンをhidden属性で持っていない、あるいは推測が可能。
- 重要な処理の際にパスワードの再入力を求めていない。
- どこからのリクエストであるかを確認するRefererを確認していない。
脆弱性が悪用された際の影響
利用者がウェブアプリケーションにログインしている最中に罠を踏んでしまうことで、攻撃者に以下のような攻撃を許してしまう。
- ログインしユーザのみが利用可能なサービスを悪用されてしまう。
- ログインしたユーザのみが編集可能な情報を改ざんされる。
対策方法
原理のところで示した3つの要素を同時に満たさないようにすることが解決策となる。
根本的な解決策は、どこからのリクエストかを確認し、サイト外からのリクエストを受信、実行しないようにすることである。
最近は画像化されたチェックコードを表示し、ユーザに入力させる「キャプチャ機能」を実装し、パスワードの再入力と同等の対策を行う場合がある。