ここが危ない!Web2.0のセキュリティ

第1回 Ajaxとクロスサイトスクリプティング

この記事を読むのに必要な時間:およそ 2 分

いろいろなファイル形式

今回の例では読み込むファイルとしてTextやHTMLを挙げましたが,他にどのような形式があるでしょうか? どのような形式を使用しなければならないという決まりはないので,開発者が使いやすいものを使うことができます。通常は以下の形式がよく使われています。

  • HTML
  • Text
  • XML
  • CSV
  • CGI(HTML)
  • JSON
※JSON(JavaScript Object Notation)についてはこの連載の第3回で紹介する予定です。

さて,ここで注意しなければならないのが,これらのファイルを動的に生成する場合です。本来これらのファイルはAjax経由で呼び出されるものですが,直接これらのファイルにアクセスすることもできます。このとき,不正なスクリプトを混入されてしまっていた場合には,クロスサイトスクリプティングが発生することになります。

もう少し詳しくクロスサイトスクリプティングが発生する状況を見ていきましょう。たとえばCSVファイルの場合ですと,単にカンマで区切られたデータですので,スクリプトは実行されないはずです。しかし,Internet Explorerの仕様に「内容によってファイルを開く」というのがあります図2)。

図2 IEの「拡張子ではなく,内容によってファイルを開く」設定

図2 IEの「拡張子ではなく,内容によってファイルを開く」設定

これは,Internet Explorerがファイルの中身を見て,その中にHTMLっぽい文字列が含まれていればHTMLだと判断するということを意味しています。このため拡張子やレスポンスに含まれるContent-Typeヘッダとは関係なく,外部から参照可能なファイルにはクロスサイトスクリプティング対策が必要であるということになります。

一方,Firefoxの場合はレスポンスのContent-Typeヘッダを見て判断しますので,ファイルの中身が何っぽいのかを気にする必要はありません。

このように,Ajax経由でアクセスさせることを想定しているファイルであっても,ブラウザで直接アクセスされた場合のことも想定しておく必要があります。

図3 ファイルへ直接アクセス

図3 ファイルへ直接アクセス

Ajaxに潜む脆弱性

すべてのファイルでクロスサイトスクリプティング対策を行う必要があると書きましたが,これはAjaxだからというわけではなく,(Web1.0の時代)から言われている話です。また,クロスサイトスクリプティングに限らず,その他の脆弱性についても同様のことが言えます。その他の脆弱性で発生しやすいものとして,次のものがあります。

  • SQLインジェクション
  • OSコマンドインジェクション
  • セッションハイジャック
  • CSRF(Cross Site Request Forgery)

どれもAjaxに限ったものではありませんので,それぞれの脆弱性の説明は省略することにします。

それではAjaxを利用したサイトの特徴を考えてみます。
Ajaxを使用したサイトでは,非同期で通信できるという利点を生かして非常に多くのページを読み込みます。ユーザのマウスジェスチャーのたびにも多くのページが読み込まれます。1ページ開いているだけでも,ユーザの気づかないところで数十リクエストが発生しているのです。たとえば,Ajaxを駆使したサイトとして有名なGmailでは,ログインするだけで20リクエストが発生していました。

このようなすべてのリクエストに対してクロスサイトスクリプティング対策を行う必要があります。
Ajaxを使用していないサイトでは,10ページあれば10ページに対策を行えばよかったのですが,Ajaxを使用しているサイトでは10ページ×10ほどのページに対策を行うことになります。

図4 攻撃面の増加

図4 攻撃面の増加

このように対策を行わなければならない箇所が爆発的に増えたことが,Ajaxのセキュリティ対策を難しくしている理由のひとつです。

著者プロフィール

福森大喜(ふくもりだいき)

株式会社セキュアスカイ・テクノロジー CTO。大学の授業で作成したプログラムのセキュリティホールを指摘されたのがきっかけでセキュリティの道に進む。セキュリティベンダーでIDS,IRT等に従事した後,Webアプリケーションのセキュリティ検査サービスを立ち上げる。2006年4月に株式会社セキュアスカイ・テクノロジーを設立。

URLhttp://www.securesky-tech.com/

コメント

コメントの記入