同一session内ではTokenが毎回同じ文字列になってしまう。
これが問題であるケースの説明:
[前提条件]
- 画面A...フォームがある。ダブルサブミット防止のためにhiddenでtokenを埋めるようになっている。ボタンを押すとAPageでの処理の後画面Bに遷移する。
- 画面B...フォームがある。ダブルサブミット防止のためにhiddenでtokenを埋めるようになっている。
[操作手順]
- 画面Aを表示
- [サーバ] tokenが生成され、sessionに保存される
- ボタンを押す
- [サーバ] tokenのチェックが行なわれる。一致するので処理は継続。sessionのトークンは破棄される
- [サーバ] 処理完了後、画面Bにリダイレクト
- [サーバ] BPageの処理が行なわれる。処理結果のHTMLをレンダリング。この時sessionに新たなトークンが保存される
- 画面Bが描画される前にボタンを押す
- [サーバ] リクエストパラメータのtokenとsession内のトークンが一致してしまうので処理が継続されてしまう!