こんなtokenのつくりかたは嫌だ

たぶんCSRFの対策なんだろうけど、対策になっていないコードをみつけた。
こういうことはしてはいけませんよ!というメモ。
記述はCakePHPを対象にしています。

※実際にみたコードではuser_idをGETで送ったりはしてません。

$tokenの作り方がまずい。
$tokenの元になっている
- $session_idは再ログイン(もしくはセッションが時間で切れる)しない限り永遠に同じ値。
- $saltは固定。
というものになっている。
つまり、$session_idが変わらない限り$tokenも変わらないということになる。

確かにindexで2回以上ボーナスがもらえないようにgotBonus()で確認しているが、receiveでは確認していないという・・・。
つまり、
>http://hoge.com/bonus/receive/?user_id=xxxx&token=$token
このURLさえつかんでしまえば、このURLをブラウザでたたきまくれば何回でもボーナスをゲットできてしまうという。
そしてこのURLをつかむのなんて全く簡単な話だということ。

ちゃんとワンタイムトークンなものを使うようにしましょう。

Pocket

Posted in その他.

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">