二重サブミット防止
同じ更新処理のリクエストを二回以上送らせないこと。
入力画面→確認画面→完了画面
というシンプルな画面遷移を前提に考える。
二重サブミットになるケースは以下の4つ。
①サブミットボタンのダブルクリック
②確認画面でサブミット後、入力画面に戻って再度サブミット
③完了画面でリロード
④CSRF攻撃による不正なリクエスト
解決策は以下の3つ。
1.サブミット後のボタン非活性化(マスク)
①に対応
2.トランザクショントークンチェック
②,③,④に対応
3.PRGパターンの適用
③に対応
→確認画面からのpostリクエストに対して、redirectをレスポンスする。ブラウザはすぐにgetリクエスト(完了画面表示のリクエスト)をするので、リロードしても完了画面の再表示でしかなくなる。