この記事は、先日の記事「問題:間違ったCSRF対策~中級編~」に対する解答編です。まだ問題を見ていない方は、先に問題を読んで(できれば自分で解答を考えて)からこの記事をお読みいただくとよいと思います。 それでは、解答を説明します。 はじめに 出題時のわざとらしさから、この問題のポイントはstrcmp関数の挙動にあると気づいた方が多いと思います。 if (empty($_SESSION['token']) || empty($_POST['token']) || strcmp($_POST['token'], $_SESSION['token'])) { // ワンタイムトークン確認 die('正規の画面からご使用ください'); } そして、strcmpの引数はどちらもempty()によるチェックが入っています。また、$_SESSION['token'] は、状態遷移図(下図)により、NU
![徳丸浩の日記: 解答:間違ったCSRF対策~中級編~](https://cdn-ak-scissors.b.st-hatena.com/image/square/3254fe787210e1b6f2df8e71acc729c968613018/height=288;version=1;width=512/https%3A%2F%2F2.bp.blogspot.com%2F-_aqogB8-R7U%2FW-f93VlGyZI%2FAAAAAAAAQJs%2F6LnDtOKU-_QFN9KRyvMaFZer4EfHv19swCPcBGAYYCw%2Fw1200-h630-p-k-no-nu%2Fstate-transition-diagram.png)