連載
» 2007年12月07日 00時00分 公開

Ajaxのセキュリティ、特殊なものだと思ってましたもいちどイチから! HTTP基礎訓練中(3)(3/3 ページ)

[杉山俊春,株式会社ユービーセキュア]
前のページへ 1|2|3       

マッシュアップはAjaxの醍醐味——しかし?

 Web 2.0の一部としてAjaxを位置付けた場合、外部サイトと連携するという利用形態を外して考えることはできないだろう。外部サイトと連携を行うと仕組みとして連携しない場合に比べ、考えなければならないことが増えることとなる。

 外部サイトと連携しようとした場合、「コンテンツを利用する側」と「コンテンツを提供する側」とに分けてそれぞれ考える必要がある。

  1. コンテンツを提供する側の場合、任意の外部サイトで利用されても問題ないか
  2. コンテンツを利用する側の場合、取り込む外部コンテンツが信頼できるか

あなたの提供しているコンテンツは安全か?

 まず、コンテンツ提供側として、「1.任意の外部サイトで利用されても問題ないか」を考えてみよう。

 Ajaxで取り込める形でコンテンツを提供している場合、特定のサイトのみと連携するつもりでも、基本的には攻撃者のサイトとも連携が可能になっている。

 JSONPのデータ形式で外部向けにコンテンツを提供している場合などは、外部サイトとの連携が容易な半面、攻撃者からのアクセスも容易となる【注1】

【注1】

JSONPのデータ形式は、そもそもセキュリティ上の制約を乗り越える手段であるため、利用する場合には注意が必要となる。


図4 外部サイトと悪意のある連携ができてしまう 図4 外部サイトと悪意のある連携ができてしまう

 また、コンテンツを提供するつもりがない場合でも、意図に反して外部サイトで利用できてしまう形式になっている可能性がある。外部サイトとの連携を目的としていないようなJSONPのデータ形式を外部コンテンツとして取り込めてしまう可能性が存在することが知られている。

【参考】

JavaScript Hijacking Vulnerability Detected - Fortify Software

http://www.fortifysoftware.com/servlet/downloads/public/JavaScript_Hijacking.pdf


 いずれの場合においても、JavaScriptとしてSCRIPTタグにより直接インクルードする形で利用できる場合は、攻撃者のサイト上でもインクルード可能であり、場合によっては悪用されてしまうため、注意が必要となる。

利用しようとしているそのコンテンツは安全か?

 次に、コンテンツ利用側として「2.取り込む外部コンテンツが信頼できるか」を考えてみる。

 外部サイトからコンテンツを取り込み、そのまま利用してしまうと、外部コンテンツに問題があった場合に、そのまま自サイトの問題となってしまう。

 例えば、外部コンテンツが悪意のあるコードに置き換えられた場合、即情報漏えいにつながるなどの危険性が考えられる。外部コンテンツの管理者が故意に行う場合もあるが、外部コンテンツなどに脆弱性が存在し、書き換えられてしまったという場合も想定できる。

 Ajaxでは、外部コンテンツを利用する際には以下の2つの方法が代表的となる。

2-a.自サイト上にプロキシとなるWebアプリケーションを設置し、XMLHttpRequestを利用して読み込む

2-b.JavaScriptとして直接インクルードする

 2-aの形式を採用した場合、プロキシとなるWebアプリケーションで出力を行う前に外部コンテンツの正当性を検証することが可能となる。正当性の検証がされない場合、問題が発生するが、正当性が検証された状態での利用であれば問題がなくなる。

 しかし、2-bのように、直接インクルードを行う場合は、検証を行う前にJavaScriptが実行されてしまうため、外部コンテンツを完全に信頼するしかない形となる。このため、不正なJavaScriptの実行を許容できない場合は、信頼できないコンテンツを直接インクルードするべきではない。

図5 連携先のサイトのセキュリティ状態に引きずられる 図5 連携先のサイトのセキュリティ状態に引きずられる

 ただし、Ajaxの場合に可能性が高いというだけであり、Ajaxに限らずSCRIPTタグにより外部サイトのJavaScriptをインクルードしている場合(例えば、アクセス解析など)についても、同様のことがいえる。

クウ 「ふむ……」

ジュン 「ディスカッションなんか細かい実装の話で盛り上がってたねー」

クウ 「Ajaxのセキュリティっていうと、難しそうな気がするけど、基本で考えないといけないことはよく考えるとそんなに難しくないのかもしれないですね」

ジュン 「そうだねー。基本的には、いままでも違う形であった問題ばかりだしねー」

クウ 「けど、細かい実装の回避策みたいのはディスカッション聞いててもよく分かんなかったです……」

ジュン 「まあ、いろいろ試してみてできるようになればいいよー」

クウ 「そうですねー。頑張ろっと♪」

クウ 「よし。勉強会終わったし、懇親会といきますかっ!」

             きょうの格言

           Ajaxの正体見たり!

         サーバ側はただのWebアプリ

 

      直接閲覧する場合も考慮して脆弱性対策をしよう。

         また、外部サイトと連携する際には、

       意図している形になっているか再度確認しよう。


次回予告:

 HTTP通信では欠かすことのできないURLエンコード。「%XX」という文字列で表される、簡単なようで奥が深いURLエンコードについて理解しよう!

(Illustrated by はるぷ)

Profile

株式会社ユービーセキュア 技術本部 テクニカルサービス部 セキュアオーディットコンサルタント

杉山 俊春(すぎやま としはる)

セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査やWebアプリケーション検査ツールの開発などに従事している。大手ショッピングサイトなどの検査実績を持つ。



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。