ありがちな脆弱性(XSS)を調べてみよう
XSSの脆弱性はWebアプリケーション開発において“つい”忘れられることの多いありがちな脆弱性です。IPAのサイトでも過去に発生して話題に上ったこともあり、いまでも「定番」といえる脆弱性でしょう。
それでは、実際にこの脆弱性を調べてみましょう。今回対象とするのは、連載第3回「Tomcat 6で実現! Ajaxを超える通信技術Comet」で作成したチャットアプリケーションです。
簡単な画面で、入力項目が2個所と送信用のボタンがありました。入力項目はそれぞれ「ユーザ名」と「メッセージ」の2つでチャットするユーザーとそのメッセージを入力するためのフォームでした。
XSSをワザと発生させる
XSSは「悪意のあるユーザーによるフォームへの入力内容により意図せぬコードが実行される脆弱性」です。GETリクエストを含んだURLによる問題が話題になることが多く、実際に問題になることも多いです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
今回対象となる入力項目は「user」「message」の2つですので、以下のようなURLを作成してWebブラウザから開いて調べてみましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
何の反応もありませんでした。こちらは何も起こらず問題ないようです。
次に、POSTリクエストを用いてスクリプトを混入させて実行してみましょう。各入力項目に以下の文字列を入力します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
そのまま送信してみると……。
JavaScriptで記述したアラートが実際に2回も表示されてしまいました。これはまさに、XSSの脆弱性があるということを暗示しており、このように入力フォームの内容が基で意図せぬ処理が実行されるのがXSSです。
このチャットアプリケーションにおいて、この脆弱性は“非常に危険”な状態だといえます。なぜなら、このチャットアプリケーションからリアルタイムに会話中の相手に対してスクリプトを送り込めることになるからです。
XSSで起きる現象の具体例
例えば、以下のように太郎さんと花子さんが会話をしているような場面です。
ここで、花子さんがほかのサーバに遷移させるスクリプトを混入させると……。
会話をしていた太郎さんが強制的に別のページへと転送されてしまいます。強制的にスクリプトを実行させてしまうこの状態、修正する必要が高いといえます。
さて、これまでに分かったことは、以下の3つの状況です。
- HTMLのタグがそのまま実行される
- POSTでの処理では発生する
- ETでの処理では発生しない
それでは、どのようにしてXSSを解消すればいいでしょうか? 次ページで解説します。
Copyright © ITmedia, Inc. All Rights Reserved.