skillup

技術ブログ

プログラミング全般

トランザクショントークンについて

投稿日:2016年6月8日 更新日:

フォーム画面で入力を行うときにはPOSTでデータを受け取ってエラーチェックしたり、データベースに入力をしたりします。

ただその時に何も考えずに安易に送信→受信の際に以下のようなトラブルがあり得ます。

  • 二重投稿(ボタンを二回押してしまう)
  • 完了画面でリロードしてしまう
  • 入力→完了画面に遷移した後で、ブラウザの「戻る」ボタンで入力画面に戻ったのちに送りなおす。

このような処理を防ぐ目的で「トランザクショントークン」という手法が使われます。

以下がトランザクショントークンの大まかな流れです。

  1. まず画面読み込み時に不規則な文字列を生成する(これをトークンといいます。)
  2. トークンをセッションに登録、同時にHTMLにもhiddenで持たせる
  3. ユーザーが投稿したときにはPOSTでトークンが送られる
  4. リクエストがPOSTの時は送られたトークンがセッションの中に入っているトークンと合致するかをチェックする。(合致した場合は正常な遷移)
  5. セッションのなかのトークンを削除し、1に戻る

この方法であれば正常な遷移の場合は、セッションのトークンとPOSTのトークンが合致しますが、不正な画面遷移では合致しないか、セッションのトークンがない、という状態になります。

上記のような実装を行うことで安全なフォームの遷移を実装することができます。

参考リンク

ECCUBEのソース

さいきょうの二重サブミット対策

FORMのリロード対策1

-プログラミング全般

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

画面テストのツールに関して

Unitテストに関してはxUnit一択だと思いますが、UI系のテストツールについて。 IDE(コードを書かずにすむマクロ系)に関して全てChromeで動くことを確認しています。 Contents1 ツ …

no image

Eclipseでのソースフォーマットでの自動改行を防ぐ

小ネタ。Eclipseのソースフォーマッタはディフォルトでは一定の字数で改行されしまい、大変見にくくなったりします。 またHTMLなどでは改行してほしいタグが改行されないなど思ったとおりに動いてくれま …

no image

フレームワーク作成時の注意ポイント

以前も多分書いていますが、フレームワーク作成時のポイントなどを列挙。 次元が違うものも多々含まれているかも。 ルーティング機能 基本設定情報の読み込み キャッシュ機能 データベース Form情報の管理 …

no image

バッチスクリプトで気をつけたい点

実務でバッチ処理を作る際に気をつけるべきと思ったこと。 基本的にエラーをいかに捉えていかにログに吐くかを最初に考える。まずはエラーありき。失敗するもの、想定した値がこない、あるいは値がないを前提として …

no image

API仕様書に関する注意事項

API仕様書を作っていて、基本的な点についてのまとめ コードと連動できれば理想(現実的には設定ファイルをJSONかYamlで作るぐらいが限界だと思う) 型のチェック、必須チェック、桁数チェック、日付の …

アーカイブ