(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)
さまざまな個所に潜む
前述の通り,攻撃に使われるのはスクリプトだけとは限らない。クロスサイト・スクリプティングの性格上,Webブラウザが解釈できる(HTML出力に使う)データは,すべてクロスサイト・スクリプティング問題として利用され得る危険性がある。ブラウザからポストされたデータ,URLの一部として与えられるクエリー文字列,ブラウザが送り返してくるCookie情報のほか,User-Agentなどの入力データ個所も利用され得る。
例えば,Webベースのメールシステムの場合,電子メールそのものに悪意あるスクリプト・コードが含まれる可能性も考慮しなければならない。大規模なWebアプリケーションなら,入力画面と出力画面が遠く離れていて,データベースを介してつながっているような場合,入力画面から入力された悪意あるデータがデータベースを介して出力画面に送られてくるかもしれない。
クロスサイト・スクリプティング問題の特徴をまとめると,次の2点を挙げることができる。
(1)スクリプトだけではなく,悪意あるHTMLタグも含む問題
(2)「クロスサイト」だけではなく,サイトからのHTML出力に第三者がスクリプトを埋め込めるという問題
意味のないhttponlyフラグ
写真3●httponlyフラグの問題点を指摘しているWebページ |
では,ここからは「スクリプト埋め込み」に関するテーマに絞って話を進めていきたい。
クロスサイト・スクリプティング問題の攻撃コードの例として,Webや書籍では,Cookie情報の盗難についての内容を一番多く掲載しているのではないだろうか。ということもあり,クライアント側のスクリプトがCookie情報にアクセスできないようにすれば,クロスサイト・スクリプティング問題は防げると考えている人がいるかもしれない。
この考えを実践したWebブラウザも存在している。Cookie情報に「httponly」フラグを付けることで,Cookieへのアクセスを禁止できるようにしたものである。
しかし,この考えはクロスサイト・スクリプティング問題の本質的な解決にはなっていない。クロスサイト・スクリプティング問題で,盗難対象となるのはCookie情報だけではない。クエリー文字列やhiddenフィールドも,クライアント側スクリプトでアクセスできる。仕様上,クライアント側スクリプトでアクセス可能なデータ格納領域は,すべてクロスサイト・スクリプティングの問題によって,盗難され得る危険性があるのだ。
さらに,httponlyフラグを用いた場合でも,クライアント側スクリプトでCookie情報にアクセスする方法は存在する。この方法は,http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdfを参照してほしい(写真3)。
本質的な解決策は,Webサイトの応答メッセージ(HTTPレスポンス・メッセージ)内に,Webサイトとは無関係の第三者がスクリプトを埋め込めないようにすることである。それは,WebアプリケーションとCGIプログラム,そしてWeb サーバーの対策を適切に行い,Webサイトの応答メッセージをきちんと制御することにほかならない。
佐名木 智貴 Sanaki Tomoki |