Cross-Site Scripting問題とは
Cross-Site Scripting問題とは、Webページから入力されたデータをもとに入力されたデータを含むWebページを動的に生成し返却することで、WebブラウザがそのWebページを表示する時に発生するセキュリティ問題です。静的なWebページや入力データを含めないで動的にWebページを生成する場合は問題ありません。
具体的に説明します。
入力データの後ろに"<SCRIPT Language=JavaScript>alert("Hello");</SCRIPT>"と入力しsubmitします。
入力したデータが出力された後に"Hello"と記述されたダイアログボックスが出力されます。
これは、Webブラウザから入力されたデータの中に<SCRIPT Language=JavaScript>alert("Hello");</SCRIPT>という記述が含まれており、アプリケーションが入力データをそのままWebページとして生成してしまったため、WebブラウザがJavaScriptとして実行してしまったためです。
この例では自分が入力したデータを自分のマシン上で実行しているため、万一問題が発生しても責任は自分になるため、セキュリティ問題とは言えませんが、間に第三者がいて自分が入力したかのように振る舞う場合に問題が発生します。
例えば、第三者のWebサイトを信用のないサイト、動的ページを生成するWebサイトを信用のあるサイトとし、Webブラウザには信用のあるサイトだけスクリプトの実行を許可したとします。
信用のないサイトからスクリプトを含むWebページが送られてきてもWebブラウザはスクリプトを実行しませんので問題ありません。しかし、信用のないサイトにあるWebページをクリックすることで信用のないサイトのスクリプトが信用のあるサイトの入力データとして送られてしまった場合、Webブラウザは信用のあるサイトから送られてきたスクリプトとして処理してしまうためスクリプトが実行されてしまいます。
これがCross-Site Scripting問題です。
問題点の整理
この問題はCGIやServletなど、Webページを動的に生成するアプリケーションを作成する際に、処置をしていただくものです。問題点を整理すると以下のようになります。
Webブラウザに表示する動的ページを生成するアプリケーションで、入力されたデータの検査を行わずにそのままWebページを生成しているもの
例
検索ページの検索結果
入力に誤りがないかを確認するために問い合わせしているもの
入力データをDBなどに登録しキーワードから入力データを表示するもの
なお、静的なWebページや入力データを含めないで動的にWebページを生成する場合は問題ありません。
調査方法
入力データを取り出すところからWebページを生成するところまでの箇所について、アプリケーションプログラムを1つずつ見直してください。もし、ソースを見直すことが現実的でない場合は、前述に示したテストをしてみることである程度確認することができます。
対処方法
問題が見つかった場合は、いずれかの方法で対処してください。
入力されたデータをWebページに埋め込まない。
特殊文字(< > &)をスペシャルキャラクタ(< > &)に変換する。
セキュリティ情報
富士通製品のセキュリティ情報については、次のurlで広報されています。
http://software.fujitsu.com/jp/security/products-fujitsu/index.html