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

あるサイトを閲覧した時、そのサイトに書かれるスクリプトが 別のサイトへとまたがって(クロスして)実行させることで 攻撃することや、またはそれを許す脆弱性を クロスサイトスクリプティング(CSS:Cross Site ScriptingまたはXSS)と呼びます。

攻撃者は、ある「閲覧用のサイト」に、別の悪意のサイトを参照させるようなスクリプトを書き込み、 その「閲覧用のサイト」の訪問者を実質的にその悪意のあるサイトへ誘導させるような手法です。
広い意味では、スクリプトがあるHTMLメールなども、 クロスサイトスクリプティングと言えるでしょう。

具体例を示します。まず、 こちらのページ のクッキー書き込み用フォームでクッキーを設定ください。 (設定後は、戻るボタンでこのページに戻ってください)
このクッキー情報を、クロスサイトスクリプティングを使って、 別のサーバーへ転送するです。 (掲示板などで、スクリプトまで埋め込めてしまうと、 その掲示板のクッキー情報が盗めてしまいます。

「クロスサイトスクリプティングのここをクリック」 すると、このサイトのクッキーを下のテキストに表示して、 そのフォーム情報を別サイトのCGIへ送信します。 送り先の別サイトでは、それを表示しています。

ここをクリックすると実行するfunctionの例を以下に示します。 なお、この例では、上記テキストを document.frm12.txt2.value と指定しています。

	function xyz(){
		var d=document.cookie;
		document.frm12.txt2.value = d;
		document.frm12.submit();
	}

リンク先のクッキー表示

以下でもリンク先のクッキーを表示しています。 これもクロスサイトスクリプティングの一つです。

リンク

このリンクのコードが次のようになります。
<a href="http://www11.tok2.com/home/manabi/cgi-bin/w_test2.cgi?test=<script>alert(document.cookie);</script>"> リンク</a>

対策

Webの閲覧者が、脆弱性のあるサイトのページを見るだけでもCookieを 盗まれる可能性があります。

つまり、ブラウザのスクリプトを使えないようにしたり、 Cookieを使えなくする設定にするのがベストです。
しかしその分だけ、ブラウザの利便性が失われます。
元々ブラウザでのスクリプト利用は、 インターネットッ接続状態において、 安全性を考慮して制限されるスクリプト実行が可能なように 作られています。ですから、 その制限を解除しない限り安全のはずです。 (セキュリティホールがない状態であれば安全です。)

なお、有効期限の指定がないGookieは、 ブラウザを閉じるととともに消滅するようになっています。 よって、クッキーを使うサイトを使った後は、ブラウザを 再起動させれば安全です。 いずれにしても、Gookieを使う設定では、Webサイト側の 作り方によって、Cookie情報が盗まれる可能性があることを 認識して使うべきでしょう。

また、サイト開発側では、第三者に盗まれる可能性が生じる 作り方をしないことです。また閲覧者の重要な情報を クッキーに残さない作りにすべきでしょう。