導入についてご不明な点はお気軽にお問合わせください

03-6416-1579 (平日10時〜18時)

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

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

クロスサイトスクリプティングとはWebアプリケーションの脆弱性の一つです。Webサイトへ悪意のあるスクリプトを埋め込む攻撃で、クロスサイトという名前の通り複数のサイトにまたがって攻撃が成立する攻撃手法です。クロスサイトスクリプティングは多くの場合XSSと略されます。

クロスサイトスクリプティング攻撃を受けると、対象のWebサイトを閲覧したユーザー環境で不正なスクリプトを実行され以下のような被害が出ます。

・セッションハイジャックにより情報を窃取される。
Webページに悪意のあるスクリプトを埋め組むことで、ページを閲覧したユーザーのCookie情報を抜き取る攻撃手法です。例えばGmailやYahooにログインする際に、一度ログインしてしまえば二度目以降はCookieが使用され自動的にログイン状態となります。セッションハイジャックではCookie情報が抜き取られてしまい、不正ログインされてしまいます。

・偽ページへ誘導され情報を窃取されてしまう。
本物そっくりの偽ページへユーザーを誘導し情報を窃取する手口です。ユーザーが偽ページのフォームなどに個人情報を入力し送信すると、攻撃者へ情報が送られてしまいます。

クロスサイトスクリプティングの脆弱性がある場合、上記のような偽ページへ誘導されるだけではなく、一般企業のホームページ上に偽の個人情報の入力フォームを設置することも可能です。

クロスサイトスクリプティング攻撃の手法

クロスサイトスクリプティング攻撃の手法は大きく以下の3種類に分類されます。

・Reflected XSS(反射型クロスサイトスクリプティング)
クロスサイトスクリプティング攻撃の中では典型的な手法で、攻撃者が用意したURLを介してスクリプトを実行させます。HTTPリクエストに含まれる攻撃コードがWeb上で動作するため、攻撃者は「https://~ ?q=<script>alert('XSS')</script>」のような特定のURLへユーザーを誘導する必要があり、誘導できなければ被害を受けることはありません。

・Store XSS(持続・蓄積型クロスサイトスクリプティング)
攻撃者がWebページへスクリプトを埋め込み、ユーザーがサイトを閲覧しただけでスクリプトが実行される攻撃手法です。攻撃者は一度スクリプトを埋め込めば、スクリプトが外されない限り持続的に動作し続けます。反射型のように偽ページへの誘導が不要なためハードルは低くなります。

・DOM Based XSS
反射型、持続・蓄積型はサーバサイドにプログラムを作るのに対し、DOM Basedはブラウザのプラグインなどクライアントサイドにプログラムを作るクロスサイトスクリプティング攻撃です。動的にWebページを出力する際に意図しないスクリプトが生成されるものです。

クロスサイトスクリプティング攻撃の被害事例

・YouTubeでのクロスサイトスクリプティング攻撃の事例
2010年7月にYouTubeを狙ったクロスサイトスクリプティング攻撃がありました。この攻撃は、YouTubeのコメントシステムにクロスサイトスクリプティングの脆弱性があり、この脆弱性を悪用されたものです。不正なポップアップが出る、意図しないWebサイトにリダイレクトされるなどの被害が発生しました。

クロスサイトスクリプティング攻撃の対策方法

・エスケープ処理/サニタイジング(無害化)
サニタイジングを実施することで、クロスサイトスクリプティングの脆弱性を悪用した攻撃を防ぐことが可能です。
クロスサイトスクリプティング攻撃を防ぐためには、特殊文字をサニタイジングする必要があります。「<」「>」「&」「”」「’」などの特殊文字は、HTMLにおいて特別な意味を持つため、これらの特殊文字を特別な意味を持たない別な文字列に変換する必要があります。クロスサイトスクリプティング攻撃は「<」「>」の特殊文字として認識するブラウザの仕組みを利用した攻撃のため、サニタイジングが一般的な対策方法です。
「<」であれば「&lt;」、「>」であれば「&gt;」に変換することで、スクリプトではなく単なる文字列として認識されます。実際の組み込みは、利用しているプログラム言語やフレームワークでも変わってきます。
文字の変換例は「<」「>」以外に
・「&」→「&amp;」
・「’」→「&#39;」
・「”」→「&quot;」
などがあります。

その他にも、例えば「<a href=”javascript:alert~”>example</a>」のように「javascript:」から始まるURLが含まれているとクロスサイトスクリプティング攻撃が可能なため、URLを出力する際には「http:// 」「https://」に制限することも対策方法の一つです。また、<script></script>の要素の内容を動的に生成する仕組みは避けた方が賢明です。

関連用語