CSRF
Cross-Site Request Forgeries
「しーさーふ」と読む
利用者の個人情報を抜き取るのではなく、利用者に以下のような処理を実行させる
利用者のアカウントによる物品の購入
利用者の退会処理
利用者のアカウントに依るSNSや問い合わせフォームへの書き込み
利用者のパスワードやメールアドレスの変更
具体例
登場人物
攻撃者X
攻撃者の作った罠サイトXS
http://XS.com
被害者A
攻撃対象サイトS
http://S.com
http://S.com/password/change
はpasswordの変更フォームがあるページ
前提
Sは例えばAmazonのようなECサイト
脆弱性がある
AはSの利用者で、既にログイン済み
Aのブラウザ上では、Sのsession idがcookieとして保存されている
XSは、例えばSのおすすめ商品の紹介ブログを模したもの
手順
1 Xが罠サイトXSを作る
ここに以下のようなものを仕込んでおく
html<body onload="doument.forms[0].submit()">
<form action="http://A.com/password/change" method="POST">
<input type="hidden" name="password" value="hogehoge">
</form>
</body>
2 AがXSに訪問する
するとJS経由で、上のformの内容がSへ送信される
Aのsession idも付与して、passwordを hogehoge
として、S上のパスワード変更処理が行われる
攻撃完了
つまり、
AがXSにアクセスした時点で、Sでのpasswordが変更される
あとは、XがAのidと hogehoge
でSにログインすれば、Aとして購入などができる
A目線では、Sとは全然関係ないXSにアクセスしただけなのに被害を受けている
サイト作成者の対策
想定通りの画面遷移が行われたかどうかを確認する。または、事前に渡したトークンが正しいものであるかをチェックするということが有効
サイト利用者の対策
XS
にアクセスした時点でアウト
対策としては、
パスワードを定期的に変える
S
以外のサイトを見るときは、 S
を常にログアウトしておく
シークレットウィンドウを使う
JSを無効にする
参考
未読箇所も多い
