skillup

技術ブログ

プログラミング全般

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

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

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

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

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

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

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

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

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

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

参考リンク

ECCUBEのソース

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

FORMのリロード対策1

-プログラミング全般

執筆者:


comment

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

関連記事

no image

エラーレポーティングサービス Sentryについて

リリースした後、運用段階に入ると定期的にバグ報告が上がってきます。 本来はリリース前に検収テストをすべきなんですが、そんな余裕ないことも多い(汗) で、そんな時に大事なのが エラーを気づけること 対処 …

no image

コードの見た目について

リーダブルコード4章。コードの見た目について。 自分は結構注意されますね。多いパターンとしては空白の位置などがいい加減だったり、今はありませんが、以前はコードの末尾にスペースを空けてセミコロンをうつ変 …

no image

データ構造の基礎知識 前編 メモリとポインタ、配列と連結リスト

WEB+DB(vol91)で使えそうな連載記事がありますのでブログにメモリます。 テーマはデータ構造です。 Contents1 データ構造とは?2 計算量3 プログラムとメモリ4 配列について4.1 …

no image

コードの抽象化

リーダブルコードも終盤に少しずつ近づいてきました。 今まではどちらかというとコードの点や線の技術に注目してきましたが、これからは面的な要素に注目していきます。 リーダブルコードでは「無関係の下位問題を …

no image

VSCodeのPluginなど

Vscodeで使っているPluginなど Contents1 基本2 UML3 git4 PHP コードフォーマット5 golang6 CSV整形 基本 Japanese Language Pack …

アーカイブ