ピザ◯ラから100枚のピザが届くまで 〜 CSRF対策とは(その1)
CSRF対策とは
自分の中で曖昧になっている部分があったので、整理してみました。
これから3回に分けて解説しようと思います。
CSRF攻撃とは
CSRF攻撃は正確に言うと、
「クロスなんちゃらかんたらフォーなんたら」と言います。
難しいので簡単に言うと、
- 悪い人が使うwebサイト攻撃方法
- これをされるとすごく困る
- 具体的には「ピザ◯ラから100枚のピザが届いたり」する
そこで今回は、どうやったら「ピザ◯ラから100枚のピザが届いたり」するのかをシミュレーションしてみました。
正常な処理
ログイン前
Aさんがブラウザを用いて、サーバとやり取りをしています。
ログイン前はCSRF攻撃は行われません。
ログイン後、購入ボタンを押すまで
ログイン後、サーバから「正しいサイト」が帰ってきました。
たくさんのピザから1枚を選んで購入ボタンをクリックします。
サーバに向かって、「cookie」「data(正確にはリクエストbody)」が送られます。
dataには「ピザ1枚」という情報が入っています。
サーバ側でユーザ特定を行い、購入処理を行う
cookieからユーザAであることを特定し、
サーバは購入処理を行います。
無事1枚のピザの注文が完了しました。
CSRFによる攻撃
ログイン後、Aさんが偽サイトにアクセスするよう第三者が誘導する
Aさんがログイン後、
知らないアドレスからメールが送られてきました。
メールにあった怪しいリンクをクリックすると、
いつも使っているピザ◯ラのサイト(実際は違う。よく似せて作っている偽サイト)が出てきました。
偽サイトにあった「お得!クリックしてね」ボタンをクリックします。
偽サイトには、「ピザ100枚」という情報をdataとして送るように指定してありました。
恐ろしいですね。
でもきっとサーバなら「こいつは嘘サイトだな」と判別してくれるはずです。
サーバ側でユーザ特定を行い、購入処理を行う
サーバはおもったよりもアホでした。
cookieデータは正しいので、cookieからユーザAであることを特定し、
サーバは購入処理を行ってしまいました。
Aさんの家には無事、ピザ100枚が届きましたとさ。
何が問題か
「リクエストが正しいサイトから送られてきているのか」
をサーバが判別することが出来ていないのが問題です。
逆にそれさえ解決してやれば、CSRF攻撃を防ぐことができそうです。
ではどうやって防ぐのか。
次回に続きます。。。