ポイント

●ユーザーがWebサーバーに送信した値は,Webアプリケーションが処理する。それによって,データベースやコンテンツ・データなどに値が反映される
●一般的なWebアプリケーションの脆弱性とは,「入出力されるデータに対する考慮不足,あるいは処理忘れ」ということである

 インターネットがラジオやテレビなどのメディアと大きく異なるのは,ほぼリアルタイムに双方向のやり取りができる点です。インターネットでは,サーバーからユーザーに向けて情報を発信するだけではなく,ユーザー側からもサーバーに情報を送ることができます。ユーザーからの情報を受け取ったWebサーバーは,既存コンテンツやデータベースと連携するためにWebアプリケーションを動かしています。このWebアプリケーションを作成するときに犯したプログラム・ミス(脆弱性)を,攻撃者が利用することで情報を詐取したり,破壊活動をしたりなど,さまざまな攻撃につなぐことが可能です。

 この連載では,Webアプリケーションの脆弱性を突いた攻撃手法として,ディレクトリ・トラバーサル,OSコマンド・インジェクション,SQLインジェクション,クロスサイト・スクリプティングを紹介します。ただし,各手法のポイントをつかむためには,前提となる知識が必要です。今回は,Webページが表示される仕組みや,動的なコンテンツを作成するための仕組みを確認しながら,Webアプリケーションの脆弱性を突く攻撃手法を確認していきます。

Webページの基本「HTML」を再確認

 WebページはHTML(hypertext markup language)という規約に従って構成されています。HTMLデータ自体は,単なるテキストです。Webブラウザは,HTMLデータ中に記述された制御用の文字列(タグ)を認識して規約に従って表示することにより,文字にリンクを埋め込んだり,画像を表示したりしています(図1)。

図1●ブラウザはHTMLデータ中の制御文字(タグ)を解釈して表示する
図1●ブラウザはHTMLデータ中の制御文字(タグ)を解釈して表示する
[画像のクリックで拡大表示]

 図1のように,HTMLで記述したテキスト・ファイルをエディタ(メモ帳)で表示すると,< や > で囲まれた文字列を確認できます。この部分がタグと呼ばれる部分で,ブラウザはその部分の意味を解釈して表示します。例えば,HTMLでは「<b>と</b>で囲んだ文字列は太字にする」,「<a href・・・>と</a>で囲んだ部分はリンクにする」といった決まりになっています。

Webアクセスの基本的な流れ

 次に,Webアクセスの基本的な流れを確認しましょう。

 ユーザーは初めにブラウザのお気に入りをクリック,あるいはアドレスバーにアクセス先のアドレス(URL)を記入してEnterーを押します。すると,ブラウザ(ユーザーPC)は,入力されたアドレスのサーバーに「ハイパーテキストを送ってください」というリクエストを送付します(図2の1)。これを受けたWebサーバーは,リクエストされた情報(HTML)をユーザーに返送します(2)。そしてデータを受け取ったユーザーのブラウザは図1で確認したように,HTMLデータを解釈してブラウザの画面にWebページを表示します。

図2●Webサーバーはユーザーからのリクエストを受けてHTMLデータを返信する
図2●Webサーバーはユーザーからのリクエストを受けてHTMLデータを返信する

 通常のWebアクセス,つまり誰がいつWebアクセスしても同じ内容のページが表示されるような場合,サーバーはリクエストに対していつも同じ情報を返答すれば良いわけです。しかし,例えば「ユーザーから送られてきた情報を,現在持っている情報に追加して表示する」ような機能を実装するためには,動的にWebページ=HTMLデータを作る仕組みが必要になります。