二重送信防止

二重サブミット抑止

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

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

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

解決策は以下の3つ。
1.サブミット後のボタン非活性化(マスク)
→disable=true ①
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