ポイント

●Webアプリケーションは,ユーザーに送信するページ(コンテンツ)を動的に作ることができる。この時に,半角<>などの特殊文字を適切に処理していないと,クロスサイト・スクリプティングにつながる
●Cookieとは,Webサーバーを訪問した人のコンピュータ(ブラウザ)に,テキスト・データを保存しておく仕組みのこと。認証情報や個人的な情報が入っている場合があるため,攻撃の的になりやすい

 クロスサイト・スクリプティングは,これまでに紹介してきた他の攻撃手法(ディレクトリ・トラバーサル,OSコマンド・インジェクション,SQLインジェクション)と同様にWebアプリケーションの脆弱性を突く攻撃手法です。ただし,名前の通り,サイトをクロスして(またがって)実行されるため,しくみが複雑になっています。

 この連載では,クロスサイト・スクリプティングの例として,ユーザーPCのCookieの内容を詐取する手法を勉強します。予備知識として,HTML,Webアプリケーションの脆弱性,Cookieのしくみを理解しておく必要があります。まだ,HTMLやWebアプリケーションの脆弱性について確認していない方は,本連載の「脆弱性を利用した攻撃手法(2) --- Webアプリケーションを突く攻撃」に目を通しておいてください。

 今回は前編です。Cookieの概要と,クロスサイト・スクリプティングの例に使うテスト環境でWebアプリケーションに脆弱性がある場合と無い場合の違いを紹介します。

Cookieとは

 Cookie(クッキー)は,Webサーバーを訪問した人のコンピュータ(ユーザーPCのブラウザ)に,テキスト・データで情報を保存しておく仕組みのことです。はじめにCookieの基本的な仕組みを図1で確認しておきましょう。

図1●Cookieの仕組み
図1●Cookieの仕組み
[画像のクリックで拡大表示]
  1. ユーザーがWebサーバーにアクセス
  2. Webサーバーがユーザーに対してCookieを発行。その中には認証情報やセッションに必要な情報が入っている
  3. ユーザーが受信したCookieの情報は,ユーザーのコンピュータ中にテキスト・ファイルとして保存される
  4. 再びユーザーが同じWebサーバーにアクセスすると,ユーザーのブラウザはWebサーバーにCookieを送信。Webサーバーは過去に送信したCookieの情報を利用してアクセス元のユーザーを識別したりする

 Cookieは色々な使い方ができます。例えば,アクセス時にユーザーIDとパスワードを入力して認証するWebサイトをイメージしてみてください。一度ユーザーIDとパスワードを入力して認証に成功すれば,2回目以降はページにアクセスしただけでユーザーIDが表示されていることがあります。これは,初回のアクセス時に,WebサーバーがユーザーPCにCookieを送り,ブラウザが保持していたからです。2回目以降に同じサイトにアクセスしたときは,ユーザーPCのブラウザがCookieの情報を読み出して表示しています。

 また,買い物サイトなどでは,ユーザーがどんなページにいつアクセスしたかなどの情報をCookieに記録している場合があります。買い物サイトは,同じユーザーが再びアクセスしてきた時に,Cookieの情報を読み出します。こうすることにより,サーバー側で「この人は,過去,こんなページにアクセスしている(こんな商品に興味がある)」というのを判断することができます。そして,広告スペースに,その人が興味を持ちそうなものを表示する,というような形で利用できます。

 ということで,Cookieには認証情報や個人的な情報が入っている場合があり,攻撃の的になることがあります。

 しかし,Cookieを保存しているのは,ユーザーのコンピュータ内です。そして,Cookieに情報を追記したり,削除できるのは基本的に発行したWebサーバーだけです。このため,通常の利用方法ではそれほど心配する必要はなく,便利にWebサービスを利用するための仕組みと考えていても差し支えないでしょう。

 なお,Cookieは,スパイウエアとして扱われることがあります。この点に関しては,別の機会(コンピュータ・ウイルスの回)に触れる予定です。