図 Webブラウザ(子供)はWebアプリケーション(お母さん)から渡されたコンテンツ(お菓子)をそのまま食べてしまう。Webアプリケーションで中身を事前に確認することが重要である。(イラスト:なかがわ みさこ)
図 Webブラウザ(子供)はWebアプリケーション(お母さん)から渡されたコンテンツ(お菓子)をそのまま食べてしまう。Webアプリケーションで中身を事前に確認することが重要である。(イラスト:なかがわ みさこ)
[画像のクリックで拡大表示]

 クロスサイト・スクリプティングとは,Webアクセスに関係する脆弱性の一つ,あるいはその脆弱性を利用した攻撃のことである。信頼しているサイトにアクセスしているつもりで,別のサイトから埋め込まれたスクリプトを実行してしまう可能性があるというものだ。普段よく目にする動的Webサイトの多くに関係するため,ぜひ押さえておきたいキーワードである。

 なお,クロスサイト・スクリプティングというつづりは長いので,略してXSSやCSSと記述することがよくある。ただし,後者はWebページのレイアウトを規定する「Cascading Style Sheets」の略語としても使われるため,最近ではXSSと表記することが多くなっている。

 クロスサイト・スクリプティングとはどんなもので,何が危険なのかを具体例で見ていこう。ここでは,Webブラウザで匿名書き込みができる掲示板サイトにアクセスしたケースを考える。掲示板に,クロスサイト・スクリプティングの脆弱性を持つターゲット・サイトへのリンクが「このページがオススメです」などと書いた記事として投稿されているとする。このリンク先が,知っているWebサイトのアドレスだったとすると,ついクリックしてしまうユーザーがいるだろう。ところが,実はこのリンク先に,攻撃者によってスクリプト・コード(プログラムの一種)が埋め込まれていることがあるのだ。

 このようなリンクをユーザーがクリックすると,Webブラウザはターゲット・サイトにアクセスする。ターゲット・サイトではそのユーザーからのリクエストに応じてコンテンツを生成しWebブラウザに返信する。このとき,ターゲット・サイトの作りによっては,ユーザーからのリクエストに含まれているスクリプト・コードをそのまま埋め込んでWebブラウザに返信してしまうケースがあるのだ。これが,ターゲット・サイトにクロスサイト・スクリプティングの脆弱性があるということである。

 一方,その返信を受け取ったWebブラウザでは,スクリプト・コードまで含めてターゲット・サイトから送られてきたデータと解釈して実行してしまう。これにより,ユーザーのパソコンに格納されている情報を勝手に読み出して,攻撃者のサーバーに送信するようなコードを実行させられる可能性がある。

 このように,攻撃者が作ったスクリプト・コードをユーザーが,信頼のおける別のWebサイト経由で実行させられることを,クロスサイト・スクリプティングと呼ぶ。なお,リンクについては,ユーザーがクリックするだけでなく,自動的に転送させたり,メールで伝えるといった手口も使われる。

 クロスサイト・スクリプティングの問題は,脆弱性を持ったWebアプリケーションが攻撃者によって書かれたスクリプト・コードの中身を検査せずにユーザーに送ってしまう,ユーザー側はスクリプト・コードが「信頼のおけるWebサイト」を経由して届くため実行してしまいやすい――という2点にある。例えていうと,お母さん(Webアプリケーション)が子供が持ってきたレシピの内容を確認せずにお菓子を作って出してしまい,子供(Webブラウザ)は出されたお菓子を疑うことなく食べてしまうのと似たイメージである(図1)。

 クロスサイト・スクリプティングの問題を抜本的に解決するには,ターゲットとなるWebアプリケーション側の対策が必要となる。子供は基本的に出された料理やお菓子に問題がないかを判断できないので,事前にお母さんが作って出していいかをチェックするしかないからである(図2)。ただ,ユーザー側も自衛策として,怪しげなWebサイトや知らない人からのメールに貼られているリンクを安易にクリックしないようにするといった対策を心がける必要はあるだろう。

 

次のうちクロスサイト・スクリプティングの説明として間違っているものはどれでしょう?


●筆者:星沢 裕二(ほしざわ ゆうじ)氏
セキュアブレインのプリンシパルセキュリティアナリスト。米シマンテックのセキュリティ対策チームで,ウイルス解析の仕事に長年従事していた。2004年10月から現職。
●イラストレータ:なかがわ みさこ
日経NETWORK誌掲載のイラストを,創刊号以来担当している。ホームページはhttp://creator-m.com/misako/