PR

●想定外の使われ方をさせない
転用されると負荷の増大を招く

 Ajaxはクライアント・サイドのJavaScriptと,サーバー・サイドのWebサービスが協調して動作する。このうちJavaScript部分は利用者のWebブラウザ上で実行するので,ソースを秘匿できず変更される可能性がある。変更されることにより,不正な引数でWebサービスが呼び出されるかもしれないし,Webサービスが想定外の使われ方をされるかもしれない。

 ここでは,株価を5分ごとに表示するAjaxアプリケーションで考えてみよう。用意しているWebサービスは,証券コードを引数として渡すと,その株価を結果として返すもの。そうしたWebサービスを,クライアント側のJavaScriptから5分ごとに呼び出す構成になっている。

 このような構成では,JavaScript部分の改変による影響を受けやすい。まず,呼び出し間隔は,ソースを変更することによって1秒間隔など極端に短い間隔に変更できてしまう。そのほか,全証券コードをループ処理で次々と渡して,その値動きをグラフ化するソフトを何者かによって作られる可能性もある。それはWebサービスの作成者が意図しない使われ方で,Ajaxアプリケーションの転用と言えよう。このような改変や転用により,Webサービスに対するトラフィックは増大し,想定外の負荷がかかる恐れがある図5)。

図5●改変されたクライアント・プログラムから利用される恐れがある
図5●改変されたクライアント・プログラムから利用される恐れがある
Webサービスの引数に証券コードを渡して戻り値で株価を返すようなアプリケーションの場合,JavaScriptのプログラムを改変して当初予定していたのとは異なる目的で利用されることが考えられる

 以下では,こうした改変や転用に対する,Webサービス側の対策を説明する。

利用者ごとの呼び出し回数を制限する

 トラフィックの増大を抑える一つの方法は,利用者ごとの呼び出し回数を制限することだ。だが前述したようにWebブラウザ上で動作するJavaScriptは改変される恐れがあるので,クライアント側で呼び出し回数を制限できない。

 利用者ごとの呼び出し回数の制限は,Webサービス側に実装するしかない。Ajaxは通常のWebアプリケーションと同じく,認証機能やCookie機能,セッション機能(Webアプリケーションのフレームワークが提供する)を利用できる。最も簡単なのは,セッション機能を利用する方法である。同一セッションからの呼び出しが一定時間内に規定回数を超えると,それ以上は応答を返さないようにする。

 しかし,セッションは接続し直せば新しく作成されるので,悪意ある利用者が何度もつなぎ直す操作をしたり,あえてCookieを送信しないようにしたりされると効果がない。

 そこでさらなる対策として,会員制とする方法が考えられる。利用者ごとにアカウントを与え,Webサービスを利用する際に認証する。もし誰かが予想以上に高負荷のリクエストを送ってくるようであれば,そのアカウントを無効にすることで対処できるようになる。