SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Web開発者の必須知識、Webアプリの不正遷移対策とは?

Webアプリケーションにおける不正遷移の種類と対策を紹介

不正遷移対策の仕組み

 Webアプリケーションの不正遷移対策は、ブラウザ側とサーバ側それぞれで行います。

ブラウザ側の対策

 ブラウザ側での対策は、「サーバ側に不正な操作によるリクエストを送らないようにすること」です。ページ内(一リクエストに対する)での2度目以降のサブミットをキャンセルします(JavaScriptのonSubmitイベント)。

 この対策はJavaScriptに依存するため、ブラウザの設定によって機能しないことも考えられますので、サーバ側でも対策を行う必要があります。

サーバ側の対策

 サーバ側では2つのポイントをチェックします。

  • ログイン済みかどうか。
  • ページ遷移の順序。

 図1のフリー領域では、必ずしもログインページからアプリケーションに入る必要はありません。会員以外に商品を見せないサイトであれば必ずログインページから入りますが、Amazonのように一般向けのサイトであればブックマークなどから商品ページに飛び込む可能性があるため、発注を開始する手前でログインを要求します。どのタイミングでログインを要求するかは、十分な検討が必要です。具体的には、例えば、以下の基準で決めます。

  • 個人情報の参照ページへ入る手前。
  • トランザクション領域へ入る手前。

 図1のトランザクション領域では、もちろんログイン済みであることが前提です。さらにページ遷移の順序をチェックします。ページ遷移の順序をチェックする仕組みは図2のようになります。

図2:ページ遷移の順序をチェックする仕組み
図2:ページ遷移の順序をチェックする仕組み
  1. リクエストごとにユニークな文字列を生成し、セッションに保存する。
  2. 1.で生成した文字列を、フォームにはHidden、リンクにはURLパラメタとして埋め込む。
  3. 次のリクエストで、セッションの文字列と、HiddenもしくはURLパラメタから取得した文字列を比較する。合致しなければ不正遷移とする。
  4. 不正遷移の場合、エラー画面へ移動する。

 このチェックをトランザクション領域内でのリクエストに対し行うことで、不正遷移を排除し、想定外の処理を行ってしまうことを回避できます。

トランザクショントークン
 「リクエストごとにユニークな文字列」を、J2EEフレームワークであるStrutsでは「トランザクショントークン」と呼びます。
業務アプリでの不正遷移対策
 業務アプリでは、ログインを行わずにアプリケーションの操作を行うことはまずありません。また、ユーザーは社員ですから「「戻る」「進む」ボタンは押さないでください」という教育をすることも可能です。そのため、ログインは常に先頭で行い、すべてのページをトランザクション領域として扱います。
 最も楽な不正遷移対策は「ツールバーやポップアップをJavaScriptで非表示にし、ブラウザをIEに限定してしまう」ことです。このような安直な対策は、利用環境をサービス側が限定できる、業務アプリ固有の条件です。

次のページ
やってはいけない、不正遷移対策

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

佐藤 龍之介(サトウ リュウノスケ)

某SIer にて、主にWeb系開発プロジェクトに従事。 趣味はラーメン食べ歩き。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2627 2008/08/15 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー