公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
複数のWebページを、Webアプリケーションが望んでいない順序でユーザが辿った場合、Webサーバ内のデータの辻褄が合わなくなったり、本来開示すべきでない情報を漏えいするおそれがある。Webアプリケーションは、望ましくないページナビゲーション操作にも一定の対策を講じておく必要がある。
どのような現象が生じるかはそれぞれのWebアプリケーションによって異なるが、想定外のナビゲーション操作が行われたとき、プログラムが誤作動して次の被害を生じるおそれがある。
Webアプリケーションは通常、複数のWebページをユーザに一定の順序で辿ってもらうことによって適切に機能するよう計画される。ところがユーザは、意図して、あるいは誤って次のような操作を行うことがあり得る。
ブックマークやURL直接入力によるページ呼び出しに対しては、次のような対策が考えられる。
一連のページの流れの途中では、すべて POSTメソッドで次のページへ遷移するようにし、それらのページはGETメソッドで呼び出せないようにする。
この方法には次のような限界がある。
HTTPリクエスト内のReferer:ヘッダを見て所定のページから遷移してきたことを確認する。
この方法には次のような限界がある。
「送信」ボタン複数回クリックによるフォームデータの再送信に対しては、次のような対策が考えられる。
JavaScript を用いて送信ボタンのクリック回数カウンタをもつと共に 2回目以降のクリックではデータを送信しないようにする。
この方法には次のような限界がある。
ユーザが「送信」ボタンをクリックした際に JavaScriptでポップアップウィンドウを出してマウスクリックイベントをそのウィンドウで受け止める。
この方法には次のような限界がある。
「戻る」ボタン操作による順路変更や「再読み込み」操作等によるフォームデータの再送信に対しては、次のような対策が考えられる。
データベース更新処理と更新結果照会処理をふたつのWebプログラムに分け、HTTPのリダイレクトレスポンスでふたつを結びつけて連続実行させる。
この方法には次のような限界がある。
各ページごとに異なる識別情報を埋め込むことによって、同一のフォームからのデータ送信の重複を検出するようにする。例えば次のようなロジックをもつ。
Webアプリケーションにおいて、ユーザのページ遷移の自由度は高い。Webアプリケーションの設計・実装の際、プログラムに都合の良いページ閲覧順路をユーザが辿ってくれるだろうと期待するだけで何も手を打たないのは時として具合が悪い。
上記のような方法を用い、ユーザのページ遷移操作に一定の制限を課すか、あるいは、ユーザが自由な順序でページを訪れたとしても、サーバにおけるデータ更新が適切に行われ、データのインテグリティが常に保たれるようにする必要がある。