はじめに
Webアプリケーションは、ブラウザ上で動作するという制約から、想定外のページ遷移が頻繁に発生します。これを「不正遷移」と呼びます。不正遷移とその制御を理解することが、Webアプリ開発者には不可欠です。
本稿では、不正遷移の種類とその対策を紹介します。
対象読者
- Webアプリの設計に携わる方、もしくは興味のある方。
不正遷移の定義と種類
不正遷移とは「Webアプリケーションの設計上、業務的に想定されていないページ間の移動」を定義することができます。具体的には、次の種類があります。
- アプリケーション内のブックマークされることを想定していないページをブックマークに登録し、後でブックマークから呼び出すこと。もしくはURLを直接入力して表示すること。
- ブラウザの「戻る」「進む」ボタンを押して移動すること。
- ブラウザの「更新」ボタンを押すこと。
- アプリケーションのボタンやリンクを連打すること。
例えば1.は「ユーザー情報画面」や「発注確認画面」をブックマークされた場合です。ログインしていない状態でユーザー情報画面に飛び込まれても個人情報を表示することはできませんし、既に発注が終わった注文の確認画面を表示してはいけません。
2.の「戻る」「進む」ボタンを押した場合、ブラウザはサーバから最新ページを取得せずに、ローカルのキャッシュから「同じURLのデータ」を取得します。URLは同じでも内容が異なるページがあると、ユーザーの予期していないページを表示する可能性がありますし、常に最新の情報が表示されなければならないページにも関わらずキャッシュ内の古いデータが表示される可能性があります。
3.の「更新」ボタンを押した場合、ブラウザは「そのページを表示する際に行ったリクエストを、再度サーバに投げる」という動作を行います。この操作を「発注結果画面」で実行すると、不正遷移対策を行わなければ二重発注してしまう危険があります。
4.は3.と似ており、「発注確認画面」の発注ボタンを連打することにより、二重もしくはN重の発注をしてしまう危険があります。また、サーバに余計な負荷をかけることになります。