トップページ サービスの概要 セキュリティ情報 購読の申し込み
HotFix Report
/セキュリティ用語/

■クロスサイト・スクリプティング (cross-site scripting)
 Webサーバ上で動作しているアプリケーションに関するセキュリティ・ホールの1つです。「XSS」と呼ばれることもあります。

 ユーザーの入力などに応じて動的に生成されるWebページにおいて、受け付けた入力データを正しく処理しないことにより、特殊なスクリプト・コードが入力されて、本来は許可されていないような操作が可能になる場合があります。このようなセキュリティ・ホールを指して「クロスサイト・スクリプティングの脆弱性」などと呼びます。これにより例えば、別のWebサイトへCookie情報を送信させたり、ローカルのコンピュータに格納されている情報をほかのサーバなどへ送信させたりすることができます。スクリプトを使って、もともとのWebサイト以外へも(サイトを越えて)情報を漏えいさせてしまうので、クロスサイト・スクリプティング(攻撃)と呼ばれます。これを防ぐには、ユーザーが入力した文字列から特別な意味を持つ文字やコードを取り除くようにする必要があります。これはWebサーバやWebブラウザ・ソフトウェアの問題ではなく、Webサーバ上で実行されているCGI(Common Gateway Interface:ユーザーからの入力に応じて、動的に処理を行うWebページを作成可能にするための仕組み)などの設計ミスに起因するセキュリティ・ホールです。

 もう少し具体的にクロスサイト・スクリプティングのセキュリティ・ホールについて解説しましょう。例えばユーザーによって指定された文字列を検索して、その結果を表示するWebページがあったとします。検索結果は、URLの中に引数としてCGIプログラムに渡され、結果を動的にHTMLページとして生成するというものです。このとき、WebページのURLを https://test/search.cgi とします。検索した結果、対象が見つからなければ、CGIプログラムによって、"文字列「$STRING$」は見つかりませんでした。"と表示するとします。このとき「$STRING$」の部分は、ユーザーが入力した文字列に置き換えられます。ここで、ユーザーの入力が「テスト」だとすると、URLは https://test/search.cgi?word=テスト となり、動的に生成されたHTMLコードは次のようになります。

<HTML>
<BODY>
文字列「テスト」は見つかりませんでした。
</BODY>
</HTML>

 しかしユーザーが「<SCRIPT>alert("Hello, world");</SCRIPT>」と入力したとすると、正しく設計されていないプログラムでは、次のようになってしまいます。

<HTML>
<BODY>
文字列「<SCRIPT>alert("Hello, world");</SCRIPT>」は見つかりませんでした。
</BODY>
</HTML>

 この結果、画面には「Hello, world」というダイアログが表示されることになります。このように、Webページの入力テキスト・ボックスなどに特別なHTMLコードやスクリプト・コードを指定することで、さまざまなコードが実行されてしまう危険性があります。これを悪用すれば、ローカルのマシンに保存されているCookieの値を取得したり(Cookieの内容が漏えいすると、それを使ってWebサーバに登録されているユーザー情報などを取り出せる可能性があります)、ほかのサイトへ誘導したり、ローカルのデータを別のサーバへ送信したりといった、さまざまな操作が可能になってしまいます。

 この例では、ユーザーがテキスト入力エリアに入力することによってダイアログが表示されましたが、このWebページではスクリプトを埋め込んだURL(https://test/search.cgi?word=<SCRIPT>alert("Hello, world");</SCRIPT>)を直接指定することでも同様に「Hello, world」というダイアログが表示されることになります。リンク先としてこのようなURLを指定していた場合、クロスサイト・スクリプティングの脆弱性を持つリンク先のWebページでは、ユーザーが意図しない動作が起きることになります。

 クロスサイト・スクリプティングを防止するには、CGIプログラムの設計者が、特別な意味を持つ文字をすべてエスケープ処理してから表示するなどの措置が必要です。これを「サニタイジング(無害化)」といいます。

 
 
Copyright (C) Digital Advantage Corp.
無断で複製・再配信などを行うことはできません。

HotFix Reportでは、細心の注意を払って情報提供を行っておりますが、本サービスにおける情報の正確性、最新性、適切性などについて、明示的又は黙示的な保証を行いません。また本サービスの停止や欠陥、それらに起因して発生する損失や損害について、一切責任を負いません。