クロスサイトスクリプティング(XSS)とは
クロスサイトスクリプティングとは、あるWebページに本来設置されていないスクリプトなどを、 CGI (Common Gateway Interface)や埋め込みの機能を利用して、アクセスしたWebブラウザに解釈 されるように仕向けることを言います。攻撃者によりあらかじめ意図的に設置された別サイトの スクリプトなどと連携するため、クロスサイトスクリプティング(Cross Site Scripting - XSS) と呼ばれています(*1)。
クロスサイトスクリプティングが行われたWebページにアクセスすると、 あらかじめ仕込まれたスクリプトなどがWebブラウザに解釈され、 ブログなどにユーザーが意図しない書き込みが自動的に行われてしまったり、 フィッシング詐欺のための偽のWebページが読み込まれ、 表示されてしまったりします。 また、Webブラウザに保存されたcookieを利用して、 ユーザーが意図しないまま自動的にWebサービスにログインした状態にさせられ、 不正な操作を行うように仕向けられることがあります。
クロスサイトスクリプティングは、 WebブラウザのNetscapeがJavaScriptに対応した1995年のすぐ後の、 1996年頃から行われていたようです。しかし、これが米国のCERTから正式に 報告されたのは2000年のことで(*2)、 この後、国内でも多くの注意喚起が行われるようになりました。
クロスサイトスクリプティングへの対策としては、 Webブラウザ側で採る方法とWebサイトを提供する側で採る方法の両方が考えられますが、 Webブラウザではクロスサイトスクリプティングが行われたWebページかどうかの 見分けがつきにくく、ユーザー側での根本的な解決策は見つかっていません。
Webサイトを提供する側、もしくはWebインタフェースを採用するサービスを 提供する側の対策としては、自らのコンテンツに他のWebサーバのコンテンツを 埋め込むことがないようにしたり、CGIプログラムにおいて入力された値を チェックして、不正なデータを無効化したりすることが挙げられます (*3)。 これらは、SQLインジェクション(*4)を防ぐための 対策にもなるため、WebページやCGIプログラムを作成する際に一般的に行われるように なってきています。
(*1) "CSS (Cascading Style Sheet)"と区別して"XSS"と呼ばれています。
(*2) "CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests", CERT
http://www.cert.org/advisories/CA-2000-02.html
(*3) "1.2. クロスサイトスクリプティング" - 情報処理推進機構
http://www.ipa.go.jp/security/awareness/vendor/programmingv1/a01_02.html
(*4) インターネット用語1分解説「SQLインジェクションとは」
http://www.nic.ad.jp/ja/basics/terms/sql-injection.html