君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

ピザ◯ラから100枚のピザが届くまで 〜 CSRF対策とは(その1)

CSRF対策とは

自分の中で曖昧になっている部分があったので、整理してみました。

これから3回に分けて解説しようと思います。

  • その1「CSRF攻撃」について

  • その2「CSRF対策」について

  • その3「RailsにおけるCSRF対策」について

CSRF攻撃とは

CSRF攻撃は正確に言うと、

「クロスなんちゃらかんたらフォーなんたら」と言います。

難しいので簡単に言うと、

  • 悪い人が使うwebサイト攻撃方法
  • これをされるとすごく困る
  • 具体的には「ピザ◯ラから100枚のピザが届いたり」する

そこで今回は、どうやったら「ピザ◯ラから100枚のピザが届いたり」するのかをシミュレーションしてみました。

正常な処理

ログイン前

f:id:karoten512:20171013192916j:plain

Aさんがブラウザを用いて、サーバとやり取りをしています。

ログイン前はCSRF攻撃は行われません。

ログイン後、購入ボタンを押すまで

f:id:karoten512:20171013193238j:plain

ログイン後、サーバから「正しいサイト」が帰ってきました。

f:id:karoten512:20171013193351j:plain

たくさんのピザから1枚を選んで購入ボタンをクリックします。

f:id:karoten512:20171013193435j:plain

サーバに向かって、「cookie」「data(正確にはリクエストbody)」が送られます。

dataには「ピザ1枚」という情報が入っています。

サーバ側でユーザ特定を行い、購入処理を行う

f:id:karoten512:20171013193628j:plain

cookieからユーザAであることを特定し、

サーバは購入処理を行います。

無事1枚のピザの注文が完了しました。

CSRFによる攻撃

ログイン後、Aさんが偽サイトにアクセスするよう第三者が誘導する

f:id:karoten512:20171013194046j:plain

Aさんがログイン後、

知らないアドレスからメールが送られてきました。

メールにあった怪しいリンクをクリックすると、

いつも使っているピザ◯ラのサイト(実際は違う。よく似せて作っている偽サイト)が出てきました。

f:id:karoten512:20171013194339j:plain

偽サイトにあった「お得!クリックしてね」ボタンをクリックします。

f:id:karoten512:20171013194517j:plain

偽サイトには、「ピザ100枚」という情報をdataとして送るように指定してありました。

恐ろしいですね。

でもきっとサーバなら「こいつは嘘サイトだな」と判別してくれるはずです。

サーバ側でユーザ特定を行い、購入処理を行う

f:id:karoten512:20171013194631j:plain

サーバはおもったよりもアホでした。

cookieデータは正しいので、cookieからユーザAであることを特定し、

サーバは購入処理を行ってしまいました。

Aさんの家には無事、ピザ100枚が届きましたとさ。

何が問題か

リクエストが正しいサイトから送られてきているのか

をサーバが判別することが出来ていないのが問題です。

逆にそれさえ解決してやれば、CSRF攻撃を防ぐことができそうです。

ではどうやって防ぐのか。

次回に続きます。。。