2重送信を防ぐ代表的な3パターン
- #Security
- #CSRF
- #Best Practices
- #UI/UX
- 2018/09/25
2重送信を防ぐ代表的な3パターン
- PRGパターン
Post Redirect Get のことで入力データなどがPostされた際にダブルクリック等で2重送信されてしまった場合データの不整合が生じるためPostした直後にリダイレクトしてGetで返却する。これにより2重送信を防ぐことができる。 - トークン
トークンはデータを送信する際などで**パラメーター値や隠し項目(hidden)**などで、あるキーに対するランダムな値を持たせる。この値は毎回変化するため2重送信がされた場合は値が異なってしまう。これにより2重送信を防止する。(エラーハンドリングを行う必要あり) - JavaScriptで送信ボタンを非活性化 JavaScriptはブラウザで動作してくれるため強制的に1回目の送信が行われた際に送信ボタンを非活性化することで2重送信を防ぐ方法である。(ブラウザ側でJSを無効にすることが簡単にできてしまうため単体での使用はダメ)
2重送信による被害
- DBに重複したデータがinsertされてしまう。
- データの不整合
- 脆弱性となり攻撃される可能性あり
などなど
2重送信になってしまうパターン
- 送信ボタンのダブルクリック
- ブラウザのリロード(F5等での更新)
- ブラウザの戻るボタン(alt + ←)で戻ってから再び送信
- CSRFによる不正更新リクエストの送信 などなど
最後に
よく使われているものをピックアップしました。
Share:
X (Twitter)