Q:Ajax(Asynchronous JavaScript and XML)とマイクロソフトの「Atlas」(開発コード名)を自社のWebサイトで使うつもりでしたが,マネージャが「Ajaxはセキュアではない」と思っています。マネージャは,セキュリティ上の制限の例として,「マイクロソフトのAtlasが『WSE(Web Services Enhancements)3.0』をサポートしていないことを挙げています。Atlasやその他のAjaxツールがWSEをサポートする計画があるかどうかご存知ですか。またこれらの技術の互換性はどうでしょうか?

 A:まず,Ajaxのセキュリティを心配しているのは,あなたのマネージャだけではないことを説明しよう。例えば米国eWeekのMatt Hines氏は「Ajax Vulnerabilities Could Pose Serious Risks(深刻なリスクとなるAjaxのぜい弱性)」と「Web 2.0, Ajax Bring New Era of Threats(Web 2.0,Ajaxがもたらす新たな脅威の時代)」という記事で,Ajaxのセキュリティ問題を提起している。

 これらの記事の基本的な主張は,Webページが危険な入り口(エンド・ポイント)を作ってしまうのと同じように,Ajaxでもセキュアでないエンドポイントが作成される可能性がある,というものだ。しかし多くの人は,「正しく使えば,AjaxがWebサイトに新たなセキュリティ問題を作り出すことはない」と認識している。

 WSE 3.0への質問に答える前に,まずWSEの必要性と,WSEがサポートされないことが本当に問題かどうかを検討しよう。

 WSEはマイクロソフトが提供しているWebサービスの拡張パッケージだ。WSEは,Webサービスに対してHTTPやHTTP Secure(HTTPS)プロトコル以上のセキュリティを実現する機能を提供する。WebサービスはSOAP(Simple Object Access Protocol)の仕様に基づいて実行されているが,この仕様にはネイティブのセキュリティ機能が含まれていない。よって,SOAP仕様の作成元であるW3C(World Wide Web Consortium)委員会は,ベースラインの標準を拡張し「WS-Security」として知られるセキュリティ機能を追加した。WSE 3.0にはマイクロソフト版のWS-Securityが含まれている。WSEの機能はセキュリティだけではないが,この記事ではセキュリティに関する内容のみを議論する。

 WSEがなくてもセキュアなWebサービスを実装できる。つまり既存のWeb技術でも,HTTPSと基本的な認証を組み合わせてセキュリティ機能を実現できる。さらにWSEを使えば,セキュアなWebサービスを,HTTPSだけに頼らない方法で実装できる。例えば,WSEを使うことで,権限のあるアカウントを持つパートナだけが使えるWebサービスを備える,セキュアなエクストラ・ネットを作成できる。

 ではWSEとAjaxはどうだろうか。説明した通り,WSEはHTTP/HTTPSプロトコルにはない機能を備えている。この機能を利用するためには,クライアントがマイクロソフトのWSEか,他のベンダーが提供する同等のコードを参照する必要がある。Ajaxにはクロスブラウザ機能(どのブラウザでも使える機能)を実現可能だが,データを取得する方法としては標準のHTTP/HTTPSプロトコルを使うしかない。よって,例えばAtlasのコンポーネントを使って既存のWebサービスをサイトで呼び出す場合,セキュリティは同じようにオリジナルのSOAP仕様に限定される。Netscape,Firefox,OperaといったWebブラウザで表示されるページ用にAtlasで実装したAjaxは,Internet Explorer(IE)で表示されるページ用に使われるAjaxとは大きく実態が異なる。よって,Ajaxを使って複数のWebブラウザ向けにWebアプリケーションを構築するのであれば,どのブラウザでも理解できるセキュリティ機能に制限して実装する必要がある。

 しかし,この制限があるからといってAjaxがセキュアでないとはいえない。AjaxはWebサイトの一部として実装されている。よって,Ajaxと自分のWebサイトのセキュリティ機能が同じである場合,AjaxのセキュリティはWebサイトと同等となる。Webサイトの一部であるコンポーネントは,Webサイトのセキュリティに一致する必要があるだけで,Ajax(つまりAtlas)も例外ではない。

 それでも,ユーザー名とパスワードをWebページの一部としてクライアントに送信し,クライアントからAjaxサービスへセキュア・コールを実行させるようなWebアプリケーションを作ることによって,自分自身でセキュリティ水準を下げてしまうことは可能である。つまり,AjaxでWebアプリケーションを作る際に,セキュリティは自分自身で検討する必要があるのだ。Webサイトで達成しているのと同じセキュリティ・レベルが,Ajaxを使ったWebサイトで維持されているかどうかは,容易にシミュレーションできるだろう。なぜならAjaxとは,ブラウザがすべてのHTMLを把握して,画面全部を書き換えずに情報を更新するHTTPポストバックだからだ。

 制限が1つだけある。自分のWebサービスにWSE3.0を導入したとしても,同じWebサービスをAjaxでは使用できない。Ajaxのセキュリティ制限でそうはできないようになっている。ただし回避策として,Webサービスを,実際のアプリケーション・ロジックを実行するDLLを呼び出すだけの簡易ハンドラに限定する,というやり方も存在する。こうすると,AjaxコールをWebサイトの一部として実行し,別のベースURLをWSEで保護されたWebサービスに割り当てられる。