二重サブミット防止

同じ更新処理のリクエストを二回以上送らせないこと。

入力画面→確認画面→完了画面
というシンプルな画面遷移を前提に考える。

二重サブミットになるケースは以下の4つ。
①サブミットボタンのダブルクリック
②確認画面でサブミット後、入力画面に戻って再度サブミット
③完了画面でリロード
CSRF攻撃による不正なリクエス

解決策は以下の3つ。
1.サブミット後のボタン非活性化(マスク)
①に対応
2.トランザクショントークンチェック
②,③,④に対応
3.PRGパターンの適用
③に対応
→確認画面からのpostリクエストに対して、redirectをレスポンスする。ブラウザはすぐにgetリクエスト(完了画面表示のリクエスト)をするので、リロードしても完了画面の再表示でしかなくなる。

※参考
https://terasolunaorg.github.io/guideline/5.1.1.RELEASE/ja/ArchitectureInDetail/DoubleSubmitProtection.html

https://qiita.com/syobochim/items/120109315f671918f28d