不正遷移対策の仕組み
Webアプリケーションの不正遷移対策は、ブラウザ側とサーバ側それぞれで行います。
ブラウザ側の対策
ブラウザ側での対策は、「サーバ側に不正な操作によるリクエストを送らないようにすること」です。ページ内(一リクエストに対する)での2度目以降のサブミットをキャンセルします(JavaScriptのonSubmitイベント)。
この対策はJavaScriptに依存するため、ブラウザの設定によって機能しないことも考えられますので、サーバ側でも対策を行う必要があります。
サーバ側の対策
サーバ側では2つのポイントをチェックします。
- ログイン済みかどうか。
- ページ遷移の順序。
図1のフリー領域では、必ずしもログインページからアプリケーションに入る必要はありません。会員以外に商品を見せないサイトであれば必ずログインページから入りますが、Amazonのように一般向けのサイトであればブックマークなどから商品ページに飛び込む可能性があるため、発注を開始する手前でログインを要求します。どのタイミングでログインを要求するかは、十分な検討が必要です。具体的には、例えば、以下の基準で決めます。
- 個人情報の参照ページへ入る手前。
- トランザクション領域へ入る手前。
図1のトランザクション領域では、もちろんログイン済みであることが前提です。さらにページ遷移の順序をチェックします。ページ遷移の順序をチェックする仕組みは図2のようになります。

- リクエストごとにユニークな文字列を生成し、セッションに保存する。
- 1.で生成した文字列を、フォームにはHidden、リンクにはURLパラメタとして埋め込む。
- 次のリクエストで、セッションの文字列と、HiddenもしくはURLパラメタから取得した文字列を比較する。合致しなければ不正遷移とする。
- 不正遷移の場合、エラー画面へ移動する。
このチェックをトランザクション領域内でのリクエストに対し行うことで、不正遷移を排除し、想定外の処理を行ってしまうことを回避できます。
最も楽な不正遷移対策は「ツールバーやポップアップをJavaScriptで非表示にし、ブラウザをIEに限定してしまう」ことです。このような安直な対策は、利用環境をサービス側が限定できる、業務アプリ固有の条件です。
