最近よく耳にするようになったセキュリティ用語に、「クロスサイトスクリプティング」がある。今回は、ウェブサイトの開発者さえ明確な定義を把握していないこともあるこの用語について説明しよう。
「XSS」とも呼ばれるクロスサイトスクリプティングは、ここ数年の間にかなり注目を集めるようになったセキュリティ攻撃の一種である。しかし多くのユーザーにとって、この用語の意味が完全に明らかなわけではない。ウェブ開発者が意味を把握していないことさえある。ここでは、どこに危険が潜んでいるかわかるように、クロスサイトスクリプティングについて説明しよう。
クロスサイトスクリプティングの定義
JavaScriptは高機能なウェブアプリケーションを開発するための強力なツールだ。HTMLやXHTMLのページに埋め込まれたコードをクライアント側で実行しないと、Googleマップ、Zoho Officeのようなウェブアプリケーションの動的な性質は実現できないだろう。残念なことに、システムに複雑なものを加えると必ず、セキュリティの問題が生じる確率も高まる。ウェブページにJavaScriptを追加する場合も同様だ。
JavaScriptによって持ち込まれる問題には、たとえば次のものがある。
- 悪意のあるウェブサイトがJavaScriptを使って、ファイルをコピーしたり削除したりするなどの変更をローカルシステムに加えるおそれがある。
- 悪意のあるウェブサイトがJavaScriptを使って、キーストロークの記録を利用するなどして、ローカルシステムでの活動を監視するおそれがある。
- 悪意のあるウェブサイトがJavaScriptを使って、ユーザーが他のブラウザウィンドウやブラウザタブで開いていた別のウェブサイトと相互作用を行うおそれがある。
上のリストのうち、1番目と2番目の問題は、ブラウザを、JavaScriptに許可する動作を制限する一種の「砂場」(セキュリティ用語の「サンドボックス」)にすることによって軽減することができる。こうして、JavaScriptがブラウザの限られた領域内でのみ動作するようにするのだ。3番目の問題もある程度制限できるのだが、その制限はあっけなく回避できる。特定のウェブページが一定の方法で別のウェブページと相互作用できるかどうかは、エンドユーザーが使うソフトウェアで制御できることではない場合があるためだ。時として、あるウェブサイトに仕掛けられた、別のウェブサイト向けのデータを盗むJavaScriptの機能は、標的となるウェブサイトの開発者が相当な注意を払うことによってのみ抑制することができる。
クロスサイトスクリプティングについて定義する場合、動的なウェブ設計の要素を採用した特定のウェブサイトに脆弱性が存在することが、セキュリティの侵害のためにだれかがJavaScriptを使う機会を設けることになっているという事実に、解答が潜んでいる。この関係には、目的を達成するために2つの別個のウェブサイト間に相互作用が存在する必要があるため、「クロスサイト」と呼ばれる。ただし多くの場合、この攻撃ではJavaScriptが必ず使われるものの、クロスサイトスクリプティング攻撃に対して脆弱であるWebサイトがJavaScriptそのものを使用している必要はまったくない。ローカル型のクロスサイトスクリプティング攻撃の場合のみ、正当なウェブサイトによってブラウザに送信されるJavaScript内に脆弱性が存在している必要があるのだ。