つい先日話題になった大学生の誤認逮捕の件。

なりすまし事件、4人は誤認逮捕か 4都府県警が謝罪へ
遠隔操作事件・真犯人と称する者からのメール全文

結局このお方は犯罪予告を書き込んだわけではなく、
ただ、掲示板のリンクをクリックしただけです(震え声)

なんでそうなっちゃったかと言うと、

(1)まず、某市Webサイトの問い合わせフォームあたり(?)にCSRF脆弱性があり、
(2)犯人が、掲示板に罠を仕掛けたURLを貼り、
(3)大学生が、その掲示板のURLをクリックし、
(4)そのURLに含まれたJavascriptがブラウザ上で実行され、※実行するブラウザは大学生のPC
(5)ブラウザ、犯人が作ったページを表示し、
(6)某市Webサイトで犯行予告が書き込まれる。※書き込んだIPアドレスは大学生のPC
(7)IPアドレスを元に、大学生が逮捕される。

たぶん、こんな感じだと思われます

CSRF(クロスサイトリクエストフォージェリ)は、Webアプリケーションの脆弱性の一種。
WebアプリにCSRF脆弱性があると、攻撃者によって誘導されたユーザーが、意図しない機能を実行させられてしまうことが起きる。

上のケースに当てはめると、
”某市Webサイト”にCSRF脆弱性があって、
”犯人”が掲示板に貼ったURLをクリックした”大学生”が、
”意図しない犯罪予告の書き込み”を実行させられた、ってことになる。

CSRFは「機能そのもの」が攻撃対象になるので、サイトの機能によっては、
・ECサイトで買い物をさせられる
・会員サイトで退会させられたり、パスワードを変更させられる

など、怖いことが盛りだくさんです。

Webアプリ側の対策は、ページ間の遷移が不正でないことを判定するため、以下のような実装が必要。
全機能(すべての画面)でCSRF対策が必須なわけではなく、要件としてどの機能を対象にするかを決めた方が良いです。

(1)ワンタイム/固定トークンを使用する
→セッションIDとトークンをセットで使用する。
→ただし、セッションIDの値をトークンとして使うのはダメ。
→リクエストはGETではなくPOSTで。

(2)CAPTCHAを使用する ※ワンタイムトークンとして実装する
→これもセッションIDとセットで。

(3)パスワードの再入力を求める

ユーザー側の対策は…
「クリックしない」くらいしかないと思われ。。
むやみやたらにリンクを踏まないっつーことですね。