skillup

技術ブログ

プログラミング全般

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

投稿日:

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

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

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

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

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

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

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

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

参考リンク

ECCUBEのソース

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

http://d.hatena.ne.jp/itinao/20091018/1255797978

 

 

-プログラミング全般

執筆者:


comment

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

関連記事

no image

ExcelVBAでの他のアプリの起動

2日続けてExcelVBA。 やはり細かく分けてすぐにプロシージャごとにテストできるのはものすごく大きなメリットですね。本日は別のアプリ起動と操作に関して。 自分がやったことはWordとメモを起動して …

no image

ポート解放

新サーバー構築をしていたときにwebサーバーとしてnginxを立てましたが、外部から接続ができません。 500エラーすら吐かれず、ログも残っていません。 こんな時はホスト自体にアクセスが届いていない可 …

no image

1度に1つのことを

今回のリーダブルコードの概念はやや抽象的。 要は一度に行うタスクは1つにする、というところがポイントになります。 そのための手法として下記のようなことを上げています。 コードが行っているタスクをすべて …

no image

オブジェクト指向 アプリケーション間連携(主にWebAPI)

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 アプリケーション間連携(主にWEBAPIに関 …

no image

正規表現に関して

SQLネタをいろいろと書いておりますが、ちょっとワンポイント的なネタで正規表現について書きたいと思います。 平均的なものは知っているつもりでしたが、シェルの正規表現について知らなかったのでちょっとメモ …