(57)【要約】【課題】ローカルストレージを介して不正なスクリプトが実行されるリスクを低減する。【解決手段】ローカルストレージ管理装置１０の制御部１２は、ブラウザ１３からのリクエスト１４に対応するサーバ２からのレスポンス１５を取得する。制御部１２は、レスポンス１５に、リクエスト１６を送信する第１の処理を示すスクリプト１５ｂを挿入し、スクリプト１５ｂを含むレスポンス１５ａをブラウザ１３に送信する。制御部１２は、ブラウザ１３からリクエスト１６を受信する。制御部１２は、リクエスト１６に応じて、ローカルストレージ１３ａに書き込まれるデータを検査する第２の処理を示すスクリプト１７ｂを含むレスポンス１７ａを生成し、レスポンス１７ａをブラウザ１３に送信する。【選択図】図１
2016173627.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行するローカルストレージ管理方法であって、
ローカルストレージを使用するブラウザからサーバ宛てのリクエストを中継し、前記リクエストに対応するレスポンスを前記サーバから受信し、
前記レスポンスに他のリクエストを送信する第１の処理を示すスクリプトを挿入し、前記スクリプトを含む前記レスポンスを前記ブラウザに送信し、
前記ブラウザから前記他のリクエストを受信し、
前記他のリクエストに応じて、前記ローカルストレージに書き込まれるデータを検査する第２の処理を示す他のスクリプトを含む他のレスポンスを生成し、前記他のレスポンスを前記ブラウザに送信する、
ローカルストレージ管理方法。
【請求項２】
前記第２の処理は、前記ブラウザ上での表示の制御に用いられる所定の種類の文字が前記データに含まれているか検査することを含む、
請求項１記載のローカルストレージ管理方法。
【請求項３】
前記第２の処理は、前記データが所定の条件に該当する場合、前記ブラウザ上において警告メッセージを表示することを含む、
請求項１または２記載のローカルストレージ管理方法。
【請求項４】
前記第１の処理は、前記他のレスポンスに応じたページを前記レスポンスとは異なるウィンドウに表示させることを含む、
請求項１乃至３の何れか一項に記載のローカルストレージ管理方法。
【請求項５】
サーバと通信を行う通信部と、
ローカルストレージを使用するブラウザと前記サーバとの通信を制御する制御部と、
を有し、前記制御部は、
前記ブラウザからのリクエストに対応する前記サーバからのレスポンスを取得し、
前記レスポンスに他のリクエストを送信する第１の処理を示すスクリプトを挿入し、前記スクリプトを含む前記レスポンスを前記ブラウザに送信し、
前記ブラウザから前記他のリクエストを受信し、
前記他のリクエストに応じて、前記ローカルストレージに書き込まれるデータを検査する第２の処理を示す他のスクリプトを含む他のレスポンスを生成し、前記他のレスポンスを前記ブラウザに送信する、
ローカルストレージ管理装置。
【請求項６】
コンピュータに、
ローカルストレージを使用するブラウザからサーバ宛てのリクエストを中継し、前記リクエストに対応するレスポンスを前記サーバから受信し、
前記レスポンスに他のリクエストを送信する第１の処理を示すスクリプトを挿入し、前記スクリプトを含む前記レスポンスを前記ブラウザに送信し、
前記ブラウザから前記他のリクエストを受信し、
前記他のリクエストに応じて、前記ローカルストレージに書き込まれるデータを検査する第２の処理を示す他のスクリプトを含む他のレスポンスを生成し、前記他のレスポンスを前記ブラウザに送信する、
処理を実行させるローカルストレージ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はローカルストレージ管理方法、ローカルストレージ管理装置およびローカルストレージ管理プログラムに関する。
【背景技術】
【０００２】
ユーザがＷＷＷ（World Wide Web）を利用する場合、ユーザが使用する端末装置上でブラウザと呼ばれるアプリケーションソフトウェアが実行される。ブラウザは、Ｗｅｂサーバと呼ばれるサーバソフトウェアが動作するサーバ装置と通信し、通信結果に基づいて主に視覚的なユーザインタフェースを提供する。
【０００３】
ブラウザは、ＨＴＴＰ（Hypertext Transfer Protocol）リクエストをＷｅｂサーバに送信し、ＨＴＴＰリクエストで要求されたファイルを含むＨＴＴＰレスポンスを受信する。受信するファイルは、表示するＷｅｂページの内容を示し、例えば、ＨＴＭＬ（HyperText Markup Language）などのマークアップ言語を用いて記述される。受信するファイルに、ブラウザ上で実行されるプログラムであるスクリプトが付加されていることもある。ブラウザは、受信したファイルに基づいて、表示領域にＷｅｂページを描画（レンダリング）する。ファイルにスクリプトが付加されている場合、ブラウザは、スクリプトを実行し、実行結果に応じてＷｅｂページの表示を制御する。
【０００４】
しかし、スクリプトは第三者が作成したプログラムであるため、攻撃者が作成した不正なスクリプトをブラウザが実行してしまうリスクがあり、セキュリティが低下するおそれがある。スクリプトを利用した攻撃の１つとして、クロスサイトスクリプティング（ＸＳＳ：Cross Site Scripting）が知られている。ＸＳＳ攻撃は、入力されたデータを十分に検査せずにそのデータを埋め込んだＷｅｂページを提供するという脆弱性のあるＷｅｂサイトを悪用して、攻撃者が指定したスクリプトをブラウザに実行させる。
【０００５】
例えば、攻撃者は、脆弱性のある標的サイトにユーザを誘導するＷｅｂページを作成する。攻撃者の用意したＷｅｂページは、標的サイトにアクセスするとき、ユーザに気付かれないように不正なスクリプトを付加するよう設定される。攻撃者のＷｅｂページを介して標的サイトにアクセスすると、ブラウザは、パラメータとして不正なスクリプトを含むＨＴＴＰリクエストを標的サイトのＷｅｂサーバに送信する。標的サイトのＷｅｂサーバは、受信したパラメータを埋め込んだファイルを生成し、ＨＴＴＰレスポンスとしてブラウザに送信する。ブラウザは、受信したＨＴＴＰレスポンスに応じてＷｅｂページを表示しようとすると、埋め込まれていた不正なスクリプトを実行してしまう。
【０００６】
ＸＳＳ攻撃は、入力されたデータにＨＴＭＬタグなどの特殊な文字が含まれていても、そのデータをそのままファイルに埋め込んでしまうという脆弱性を利用することで実現される。ＸＳＳ攻撃が成功すると、不正なスクリプトによって秘密情報が収集されて、攻撃者に対して送信されてしまうおそれがある。例えば、ブラウザと標的サイトとの間の一連の通信を識別するためのセッションＩＤや、標的サイトにログインするためのパスワードなどが収集され得る。セッションＩＤが攻撃者に知られると、攻撃者がユーザになりすまして現在の通信を乗っ取ってしまうおそれがある。また、パスワードが攻撃者に知られると、ユーザに代わって攻撃者が標的サイトにログインすることが可能となる。
【０００７】
これに対し、ＸＳＳ攻撃に対して十分な対策を行っていないＷｅｂサーバと安全に通信できるよう、ブラウザにＸＳＳフィルタをインストールすることが提案されている。このＸＳＳフィルタは、ＨＴＴＰリクエストのトラフィックを解析し、ＨＴＴＰレスポンスのトラフィックにおけるＸＳＳ攻撃を検出する。ＸＳＳフィルタは、受信したＨＴＴＰレスポンスに含まれるスクリプトタグの所定の文字を別の文字に置換することで、スクリプトを無効化し、実行されようとしているＸＳＳ攻撃をブロックする。
【０００８】
また、幾つかのブラウザ製品について、ＸＳＳ攻撃をブロックするセキュリティ機能の実装状況が調査されている。この調査結果によれば、あるブラウザ製品は、ＨＴＴＰリクエストに含まれていたスクリプトがＨＴＴＰレスポンスにも同様に含まれている場合、その通信をＸＳＳ攻撃と判定する。すると、当該ブラウザ製品は、ＨＴＴＰレスポンスからスクリプトを削除して無効化すると共に、Ｗｅｂページが修正された旨のユーザ宛てメッセージをウィンドウ上部などの所定の位置に表示する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２００９／０６１５８８号
【非特許文献】
【００１０】
【非特許文献１】一般社団法人ＪＰＣＥＲＴコーディネーションセンター、「ＨＴＭＬ５を利用したＷｅｂアプリケーションのセキュリティ問題に関する調査報告書 Rev.2」、第5.1節、2013年10月30日
【非特許文献２】Gina Narkunas、「Internet Explorer 8 (IE8)の新たなセキュリティとは？」、2009年7月、Microsoft Corporation、［2015年2月24日検索］、インターネット〈URL: http://technet.microsoft.com/ja-jp/security/ee281750.aspx〉
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ところで、スクリプトから使用できるローカルの記憶領域に関して、従来は、「クッキー」と呼ばれる小容量のデータ格納領域が使用されてきた。一方で、近年は、より操作性の高いＷｅｂページを実現するため、ブラウザ上でサイズの大きいデータを扱いたいことがある。そこで、マークアップ言語の規格であるＨＴＭＬ５では、「ローカルストレージ」と呼ばれる大容量（例えば、１０ＭＢ以上）の記憶領域が定義された。
【００１２】
スクリプトは、ローカルストレージに様々なデータを格納させることができる。例えば、ブラウザがオフライン状態の間は、ユーザが入力したデータをローカルストレージに保存しておき、次にオンライン状態になったときに、ローカルストレージのデータをＷｅｂサーバにまとめて送信するＷｅｂサイトを作成することが可能である。
【００１３】
しかしながら、ブラウザにローカルストレージが実装されることにより、ローカルストレージを介してＸＳＳ攻撃が行われるリスクがある。ローカルストレージを介したＸＳＳ攻撃は、ローカルストレージから読み出したデータを検査せずにそのまま用いてＷｅｂページを書き換えるという脆弱性のあるＷｅｂサイトを悪用する。
【００１４】
例えば、入力されたデータをすぐにＷｅｂページに表示するのではなく、当該データをローカルストレージに一旦格納し、格納したデータを後で読み出してブラウザ側でＷｅｂページを書き換えるＷｅｂサイトがあるとする。この場合、例えば、攻撃者は標的サイトのＷｅｂサーバ経由で、不正なスクリプトをデータとしてブラウザに送り込む。すると、ブラウザは、受信したデータをローカルストレージに格納する。その後、ブラウザは、標的サイトのスクリプトに従って、ローカルストレージからデータを読み出してＷｅｂページを書き換える。このとき、読み出したデータは不正なスクリプトであるため、Ｗｅｂページが書き換えられると当該不正なスクリプトが実行されてしまう可能性がある。
【００１５】
また、ＨＴＭＬ５には、ブラウザ上の異なるウィンドウに表示されたＷｅｂページの間で、Ｗｅｂサーバを経由せずにメッセージを送信できるＷｅｂメッセージングという技術が規定されている。Ｗｅｂメッセージングを実装したブラウザでは、攻撃者のＷｅｂページから標的サイトのＷｅｂページに、Ｗｅｂサーバを経由せずに不正なスクリプトを直接送信できる可能性がある。ＨＴＴＰリクエストとＨＴＴＰレスポンスを比較する従来のＸＳＳフィルタでは、このような形態のＸＳＳ攻撃を検出することは難しい。
【００１６】
１つの側面では、本発明は、ローカルストレージを介して不正なスクリプトが実行されるリスクを低減できるローカルストレージ管理方法、ローカルストレージ管理装置およびローカルストレージ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
１つの態様では、コンピュータが実行するローカルストレージ管理方法が提供される。ローカルストレージを使用するブラウザからサーバ宛てのリクエストを中継し、リクエストに対応するレスポンスをサーバから受信する。レスポンスに他のリクエストを送信する第１の処理を示すスクリプトを挿入し、スクリプトを含むレスポンスをブラウザに送信する。ブラウザから他のリクエストを受信する。他のリクエストに応じて、ローカルストレージに書き込まれるデータを検査する第２の処理を示す他のスクリプトを含む他のレスポンスを生成し、他のレスポンスをブラウザに送信する。
【００１８】
また、１つの態様では、通信部と制御部とを有するローカルストレージ管理装置が提供される。また、１つの態様では、コンピュータに実行させるローカルストレージ管理プログラムが提供される。
【発明の効果】
【００１９】
１つの側面では、ローカルストレージを介して不正なスクリプトが実行されるリスクが低減する。
【図面の簡単な説明】
【００２０】
【図１】第１の実施の形態のローカルストレージ管理装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】端末装置のハードウェア例を示すブロック図である。
【図４】クロスサイトスクリプティングの第１の例を示す図である。
【図５】クロスサイトスクリプティングの第２の例を示す図である。
【図６】端末装置の機能例を示すブロック図である。
【図７】アクセス情報テーブルの例を示す図である。
【図８】ルールファイルの例を示す図である。
【図９】Ｗｅｂアクセスの例を示すシーケンス図である。
【図１０】Ｗｅｂページに付加されるスクリプトの例を示す図である。
【図１１】制御ページに含まれるスクリプトの例を示す図である。
【図１２】プロキシ転送処理の手順例を示すフローチャートである。
【図１３】ブラウザアクセス処理の手順例を示すフローチャートである。
【図１４】ブラウザ検査処理の手順例を示すフローチャートである。
【図１５】ウィンドウの表示例を示す図である。
【発明を実施するための形態】
【００２１】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のローカルストレージ管理装置を示す図である。
【００２２】
第１の実施の形態のローカルストレージ管理装置１０は、サーバ２とブラウザ１３との間で通信を中継する。サーバ２は、例えば、サーバアプリケーションとしてのＷｅｂサーバを実行するサーバ装置である。ブラウザ１３は、例えば、ローカルストレージ管理装置１０を介してサーバ２とＨＴＴＰ通信を行うクライアントアプリケーションとしてのＷｅｂブラウザである。ブラウザ１３は、ローカルストレージ管理装置１０上で実行されてもよいし、他の装置上で実行されていてもよい。後述するローカルストレージ管理装置１０の処理は、例えば、ブラウザ１３に対するプロキシサーバとして実装される。その場合、ブラウザ１３には、サーバ２へのアクセスがプロキシサーバを経由するよう設定される。
【００２３】
ブラウザ１３は、ブラウザ１３を実行する装置（例えば、ローカルストレージ管理装置１０）が備える記憶領域であるローカルストレージ１３ａを使用する。ブラウザ１３上で実行されるスクリプトによって、ローカルストレージ１３ａにデータを書き込むことができる。ローカルストレージ１３ａは、例えば、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性の記憶装置上に形成される。ローカルストレージ１３ａに書き込まれたデータは、ブラウザ１３を終了しても保持される。
【００２４】
ローカルストレージ管理装置１０は、通信部１１および制御部１２を有する。通信部１１は、サーバ２と通信を行う通信インタフェースである。通信部１１は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。制御部１２は、ブラウザ１３とサーバ２との間の通信を制御する。制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサでもよい。また、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。なお、プロセッサは、ＲＡＭ（Random Access Memory）などのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。
【００２５】
ここで、制御部１２は、ブラウザ１３がサーバ２宛てのリクエスト１４を送信すると、ブラウザ１３からリクエスト１４を受信する。リクエスト１４は、例えば、ＵＲＬ（Uniform Resource Locator）などのアドレスを含むＨＴＴＰリクエストである。制御部１２は、リクエスト１４を受信すると、サーバ２にリクエスト１４を転送し、リクエスト１４に対応するレスポンス１５をサーバ２から受信する。レスポンス１５は、例えば、Ｗｅｂページの内容をＨＴＭＬを用いて記述したＨＴＭＬファイルを含む。
【００２６】
制御部１２は、レスポンス１５にスクリプト１５ｂを挿入し、スクリプト１５ｂを含むレスポンス１５ａをブラウザ１３に送信する。スクリプト１５ｂは、リクエスト１６を送信する処理（第１の処理）を示す。リクエスト１６は、例えば、ＨＴＴＰリクエストである。リクエスト１６にＵＲＬが含まれる場合、ＵＲＬのプロトコルスキーム・ホスト名・ポート番号をリクエスト１４と同じにする。これにより、ブラウザ１３によって、後述するレスポンス１５ａとレスポンス１７ａとが同じＷｅｂサイトに関するものと認識される。好ましくは、リクエスト１６に所定の文字列が含まれるようにする。
【００２７】
レスポンス１５ａを受信したブラウザ１３は、レスポンス１５ａに基づいて一のウィンドウにＷｅｂページを表示する。また、ブラウザ１３は、レスポンス１５ａに含まれるスクリプト１５ｂを実行する。これにより、ブラウザ１３は、リクエスト１６を送信する。
【００２８】
制御部１２は、ブラウザ１３からリクエスト１６を受信する。すると、制御部１２は、リクエスト１６に対する応答として、レスポンス１７ａをブラウザ１３に送信する。レスポンス１７ａは、例えば、レスポンス１５ａとは異なるＷｅｂページであって制御用のＷｅｂページを示すＨＴＭＬファイルを含む。レスポンス１７ａを送信するか否かは、例えば、受信したリクエスト１６に所定の文字列が含まれているか否かによって判断できる。
【００２９】
レスポンス１７ａは、スクリプト１７ｂを含む。スクリプト１７ｂは、ローカルストレージ１３ａに書き込まれるデータを検査する処理（第２の処理）を示す。レスポンス１５ａに基づくＷｅｂページとレスポンス１７ａに基づくＷｅｂページとは、同じＷｅｂサイトのものと認識されるようにする。これにより、スクリプト１７ｂは、レスポンス１５ａに基づいて表示されたＷｅｂページまたはこれと同じＷｅｂサイト内の他のＷｅｂページで行われたローカルストレージ１３ａへの書き込みを検出することができる。
【００３０】
レスポンス１７ａを受信したブラウザ１３は、レスポンス１７ａに基づいてＷｅｂページを表示する。例えば、ブラウザ１３は、レスポンス１７ａに基づく制御用のＷｅｂページを、レスポンス１５ａに基づくＷｅｂページとは異なるウィンドウに表示する。ここで言う「異なるウィンドウ」には、タブ型ブラウザにおける異なるタブが含まれてもよい。
【００３１】
ブラウザ１３は、例えば、ローカルストレージ１３ａにデータが書き込まれると、ローカルストレージ１３ａの更新を検出する。すると、ブラウザ１３は、スクリプト１７ｂに従って、ローカルストレージ１３ａに書き込まれたデータを検査する。例えば、ブラウザ１３は、書き込まれたデータが、Ｗｅｂページの表示の制御に用いられる所定の種類の文字（例えば、ＨＴＭＬで特別の意味をもつ特殊文字（エスケープ文字）や、スクリプトタグなど）を含むか検査する。所定の検査条件に該当する場合（例えば、書き込まれたデータが所定の種類の文字を含む場合）、ブラウザ１３は、当該データの書き込みがＸＳＳ攻撃を形成する可能性がありセキュリティ上のリスクがあると判定する。
【００３２】
ＸＳＳ攻撃の可能性があると判定した場合、例えば、ブラウザ１３は、ユーザに対してセキュリティ上のリスクを警告する。このとき、ブラウザ１３は、ローカルストレージ１３ａに格納されたデータを書き換えるよう、ユーザに提案してもよい。また、ブラウザ１３は、ユーザが許可する場合には、ローカルストレージ１３ａからＸＳＳ攻撃のリスクが除去されるように、書き込まれたデータを更新または削除してもよい。
【００３３】
第１の実施の形態のローカルストレージ管理装置１０によれば、リクエスト１４に対応するレスポンス１５に、リクエスト１６を送信するスクリプト１５ｂが挿入されて、レスポンス１５ａとしてブラウザ１３に送信される。リクエスト１６に応じて、ローカルストレージ１３ａに書き込まれるデータを検査するスクリプト１７ｂを含むレスポンス１７ａがブラウザ１３に送信される。これにより、不正なスクリプトがローカルストレージ１３ａに書き込まれるのを検出でき、ローカルストレージ１３ａを介して不正なスクリプトがブラウザ１３上で実行されるリスクを低減することができる。よって、ＸＳＳ攻撃を通じた情報漏洩のリスクを低減できるなど、セキュリティを向上させることができる。
【００３４】
また、レスポンス１５ａに基づくＷｅｂページとレスポンス１７ａに基づくＷｅｂページとが同じＷｅｂサイトに関するものと認識されるように、スクリプト１５ｂによってリクエスト１６が生成される。これにより、ブラウザ１３は、セキュリティ上の制限に反することなくリクエスト１６を送信できる。また、スクリプト１７ｂは、レスポンス１５ａに基づくＷｅｂページ上またはこれと同じＷｅｂサイトに属する他のＷｅｂページ上で行われたローカルストレージ１３ａの更新を検出することができる。よって、ブラウザ１３を改変しなくても、ローカルストレージ管理装置１０は、ブラウザ１３の既存の仕様や制限のもとでローカルストレージ１３ａを管理できる。
【００３５】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。
第２の実施の形態の情報処理システムは、視覚的なユーザインタフェースであるＷｅｂページをユーザに提供するクライアントサーバ型のＷｅｂシステムである。この情報処理システムは、サーバ装置２１，２２と端末装置１００，１００ａ，１００ｂを含む。サーバ装置２１，２２と端末装置１００，１００ａ，１００ｂは、ネットワーク２０に接続されている。ネットワーク２０は、インターネットなどの広域ネットワークである。
【００３６】
サーバ装置２１，２２は、サーバアプリケーションとしてのＷｅｂサーバを実行するサーバコンピュータである。サーバ装置２１とサーバ装置２２とは、異なるＷｅｂサイトを提供する。サーバ装置２１，２２は、端末装置１００，１００ａ，１００ｂからＨＴＴＰリクエストを受信すると、ＨＴＴＰリクエストに含まれるＵＲＬに応じたＨＴＭＬファイルを生成し、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを返信する。
【００３７】
ＨＴＭＬファイルは、Ｗ３Ｃ（World Wide Web Consortium）が策定したＨＴＭＬ５の規格に従って記述されている。ＨＴＭＬファイルには、端末装置１００，１００ａ，１００ｂで実行されるスクリプトが含まれていることがある。また、ＨＴＭＬファイルには、スクリプトを記述したスクリプトファイルへのリンクが含まれていることがある。
【００３８】
端末装置１００，１００ａ，１００ｂは、クライアントアプリケーションとしてのブラウザを実行するクライアントコンピュータである。端末装置１００，１００ａ，１００ｂは、ブラウザ上のユーザ操作に応じてＨＴＴＰリクエストをサーバ装置２１，２２に送信し、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信する。端末装置１００，１００ａ，１００ｂは、受信したＨＴＭＬファイルに基づいてＷｅｂページを表示する。
【００３９】
ＨＴＭＬファイルまたはＨＴＭＬファイルからリンクされたスクリプトファイルにスクリプトが含まれている場合、端末装置１００，１００ａ，１００ｂは、取得したスクリプトを実行してＷｅｂページの表示を制御する。なお、端末装置１００は、第１の実施の形態のローカルストレージ管理装置１０の一例である。
【００４０】
図３は、端末装置のハードウェア例を示すブロック図である。
端末装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。上記のユニットは、それぞれバス１０８に接続されている。
【００４１】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、端末装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００４２】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、端末装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４３】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、ローカルストレージ管理プログラムが含まれる。なお、端末装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４４】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、端末装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００４５】
入力信号処理部１０５は、端末装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、端末装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４６】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４７】
通信インタフェース１０７は、ネットワーク２０に接続され、サーバ装置２１，２２と通信を行う。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局またはアクセスポイントと無線リンクで接続される無線通信インタフェースでもよい。
【００４８】
ただし、端末装置１００は、媒体リーダ１０６を備えなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、端末装置１００の筐体と一体に形成されてもよい。端末装置１００ａ，１００ｂおよびサーバ装置２１，２２も、端末装置１００と同様のハードウェアを用いて実現できる。なお、ＣＰＵ１０１は、第１の実施の形態の制御部１２に対応する。通信インタフェース１０７は、第１の実施の形態の通信部１１に対応する。
【００４９】
次に、ＸＳＳ攻撃について説明する。ＸＳＳ攻撃は、あるＷｅｂサイト（標的サイト）のプログラムの不備を利用して、他のＷｅｂサイト（攻撃者サイト）のＷｅｂページから標的サイトのＷｅｂページに対して不正なスクリプトを送り込む。ブラウザは、不正なスクリプトが埋め込まれたＷｅｂページを表示することで、その不正なスクリプトを実行してしまう可能性がある。不正なスクリプトとしては、例えば、ブラウザと標的サイトとの間の通信の識別に用いるセッションＩＤやクッキーに保存されたパスワードなどの秘密情報を取得し、攻撃者に対して秘密情報を送信するものが考えられる。
【００５０】
ＸＳＳ攻撃に利用される標的サイトは、ブラウザから入力されたデータを十分に検査せずにＷｅｂページに埋め込んでしまうという脆弱性を有する。入力されたデータが十分に検査されないため、スクリプトタグなどの制御用の文字列を含む想定外のデータも、そのままＷｅｂページに埋め込まれてしまう可能性がある。その脆弱性を利用して、攻撃者は標的サイトのＷｅｂページに不正なスクリプトを送り込む余地がある。
【００５１】
特に、第２の実施の形態では、端末装置１００，１００ａ，１００ｂ内に用意されたローカルストレージを利用するＸＳＳ攻撃について考える。入力されたデータを一旦ローカルストレージに格納し、後でローカルストレージからデータを読み出してＷｅｂページに埋め込むＷｅｂサイトを、標的サイトとして利用する。標的サイトのプログラムには、ローカルストレージへのデータの格納やＷｅｂページへのデータの埋め込みの際に、データを十分に検査していないという不備があるものとする。以下では、サーバ装置２１が攻撃者サイトを提供し、サーバ装置２２が標的サイトを提供しているものとして、ローカルストレージを利用したＸＳＳ攻撃について説明する。
【００５２】
図４は、クロスサイトスクリプティングの第１の例を示す図である。
ＸＳＳ攻撃の第１の類型は、ブラウザから標的サイトのＷｅｂサーバに不正なスクリプトが送信され、標的サイトのＷｅｂサーバによってＷｅｂページに不正なスクリプトが埋め込まれるものである。第１の類型は、反射型と呼ぶこともできる。
【００５３】
端末装置１００は、サーバ装置２１から攻撃者サイトである「サイトＡ」のＨＴＭＬファイル３１を受信する。ＨＴＭＬファイル３１は、ユーザ操作によって標的サイトである「サイトＢ」にアクセスする際に、ユーザに気付かれないように不正なスクリプトをＨＴＴＰリクエストに挿入するよう設定されている。例えば、ＨＴＭＬファイル３１は、ハイパーリンクで指定される「サイトＢ」のＵＲＬの末尾に、不正なスクリプトを付加しておく。また、例えば、ＨＴＭＬファイル３１は、送信ボタンが押下されたときに、「サイトＢ」に送信されるデータに不正なスクリプトが挿入されるように設定しておく。
【００５４】
端末装置１００は、ＨＴＭＬファイル３１に基づいて表示されたＷｅｂページ上で、「サイトＢ」にアクセスするユーザ操作を検出する。例えば、端末装置１００は、「サイトＢ」へのハイパーリンクの選択や、「サイトＢ」にデータを送信する送信ボタンの押下などのユーザ操作を検出する。すると、端末装置１００は、サーバ装置２２にＨＴＴＰリクエストを送信する。このＨＴＴＰリクエストには、上記のように「サイトＡ」によって予め用意された不正なスクリプトが、入力データとして挿入されている。
【００５５】
サーバ装置２２は、端末装置１００からＨＴＴＰリクエストを受信する。すると、サーバ装置２２は、ＨＴＴＰリクエストに含まれるデータに基づいてＨＴＴＰファイル３２を生成し、端末装置１００に送信する。ＨＴＭＬファイル３２は、端末装置１００から受信したデータを、キー「ｎａｍｅ」と対応付けてローカルストレージに書き込むスクリプトを含む。ここで、サーバ装置２２は、受信したデータを検査していないとする。よって、端末装置１００から受信したデータが不正なスクリプトであるため、ＨＴＭＬファイル３２のスクリプト（「サイトＢ」の正規のスクリプト）は、不正なスクリプトをキー「ｎａｍｅ」と対応付けてローカルストレージに書き込もうとする。
【００５６】
端末装置１００は、サーバ装置２２からＨＴＭＬファイル３２を受信する。すると、端末装置１００は、ＨＴＭＬファイル３２に含まれる「サイトＢ」の正規のスクリプトを実行してローカルストレージを更新する。これにより、ローカルストレージには、キー「ｎａｍｅ」と対応付けて不正なスクリプトが書き込まれる。
【００５７】
その後、端末装置１００は、ユーザ操作に応じて「サイトＢ」に関するＨＴＴＰリクエストをサーバ装置２２に送信する。サーバ装置２２は、端末装置１００からＨＴＴＰリクエストを受信し、ＨＴＭＬファイル３３を生成して端末装置１００に送信する。ＨＴＭＬファイル３３は、ローカルストレージからキー「ｎａｍｅ」に対応するデータを読み出し、読み出したデータをＷｅｂページに埋め込むスクリプトを含む。ＨＴＭＬファイル３３のスクリプトは、読み出したデータを検査していないとする。
【００５８】
端末装置１００は、サーバ装置２２からＨＴＭＬファイル３３を受信する。すると、端末装置１００は、ＨＴＭＬファイル３３に含まれる「サイトＢ」の正規のスクリプトを実行して、ローカルストレージからキー「ｎａｍｅ」に対応付けられた不正なスクリプトを読み出す。そして、端末装置１００は、読み出した不正なスクリプトを、スクリプトタグなどの特殊な文字列も含めてそのままＷｅｂページに埋め込む。これにより、ＨＴＭＬファイル３３に基づいてＷｅｂページが表示されると、端末装置１００は、そのＷｅｂページに埋め込まれた不正なスクリプトを実行してしまう可能性がある。なお、図４の例では、ローカルストレージへのデータの書き込みとローカルストレージからのデータの読み出しとを別のＷｅｂページが行っているが、同一のＷｅｂページが行ってもよい。
【００５９】
図５は、クロスサイトスクリプティングの第２の例を示す図である。
ＸＳＳ攻撃の第２の類型は、攻撃者サイトのＷｅｂページと標的サイトのＷｅｂページとが同時に表示されているときに、ブラウザ上で前者から後者に不正なスクリプトが送り込まれるものである。ブラウザ上でのＷｅｂページ間の通信には、ＨＴＭＬ５の仕様に規定されたＷｅｂメッセージングの技術を用いることができる。第２の類型は、ＤＯＭ（Document Object Model）型と呼ぶこともできる。
【００６０】
端末装置１００は、サーバ装置２１から攻撃者サイトである「サイトＡ」のＨＴＭＬファイル３４を受信する。ＨＴＭＬファイル３４は、標的サイトである「サイトＢ」のＷｅｂページが同時に表示されている場合に、Ｗｅｂメッセージングの技術を用いてブラウザ上で「サイトＢ」のＷｅｂページにメッセージを送信するスクリプトを含む。送信されるメッセージには、不正なスクリプトが含まれる。
【００６１】
また、端末装置１００は、サーバ装置２２から「サイトＢ」のＨＴＭＬファイル３５を受信する。すると、端末装置１００は、ＨＴＭＬファイル３４に基づく「サイトＡ」のＷｅｂページと共に、ＨＴＭＬファイル３５に基づく「サイトＢ」のＷｅｂページを表示する。例えば、端末装置１００は、「サイトＡ」のＷｅｂページからの要求に応じて、「サイトＢ」のＷｅｂページを、別のウィンドウ（タブである場合を含む）または「サイトＡ」のＷｅｂページ内の一部領域に表示することが考えられる。また、例えば、端末装置１００は、あるＷｅｂページ内の一部領域に、「サイトＡ」のＷｅｂページと「サイトＢ」のＷｅｂページとを並べて表示することが考えられる。
【００６２】
ＨＴＭＬファイル３５は、他のＷｅｂページからのメッセージを監視し、メッセージを受信した場合、メッセージに含まれるデータをキー「ｎａｍｅ」と対応付けてローカルストレージに書き込むスクリプトを含む。ＨＴＭＬファイル３５に含まれるスクリプトは、メッセージに含まれるデータを検査していないとする。
【００６３】
端末装置１００は、ＨＴＭＬファイル３４に含まれる「サイトＡ」の正規のスクリプトを実行して、「サイトＢ」のＷｅｂページに対して不正なスクリプトを含むメッセージを送信する。すると、端末装置１００は、ＨＴＭＬファイル３５に含まれる「サイトＢ」の正規のスクリプトを実行して、ローカルストレージにキー「ｎａｍｅ」と対応付けてローカルストレージを更新する。これにより、ローカルストレージには、キー「ｎａｍｅ」と対応付けて不正なスクリプトが書き込まれる。
【００６４】
その後、端末装置１００は、ユーザ操作に応じて「サイトＢ」に関するＨＴＴＰリクエストをサーバ装置２２に送信する。サーバ装置２２は、端末装置１００からＨＴＴＰリクエストを受信し、ＨＴＭＬファイル３６を生成して端末装置１００に送信する。ＨＴＭＬファイル３６は、ローカルストレージからキー「ｎａｍｅ」に対応するデータを読み出し、読み出したデータをＷｅｂページに埋め込むスクリプトを含む。ＨＴＭＬファイル３６のスクリプトは、読み出したデータを検査していないとする。
【００６５】
端末装置１００は、サーバ装置２２からＨＴＭＬファイル３６を受信する。すると、端末装置１００は、ＨＴＭＬファイル３６に含まれる「サイトＢ」の正規のスクリプトを実行して、ローカルストレージからキー「ｎａｍｅ」に対応付けられた不正なスクリプトを読み出す。そして、端末装置１００は、読み出した不正なスクリプトを、スクリプトタグなどの特殊な文字列も含めてそのままＷｅｂページに埋め込む。これにより、ＨＴＭＬファイル３６に基づいてＷｅｂページが表示されると、端末装置１００は、そのＷｅｂページに埋め込まれた不正なスクリプトを実行してしまう可能性がある。なお、図５の例では、ローカルストレージへのデータの書き込みとローカルストレージからのデータの読み出しとを別のＷｅｂページが行っているが、同一のＷｅｂページが行ってもよい。
【００６６】
このように、ＸＳＳ攻撃の第２の類型によれば、端末装置１００からサーバ装置２２に不正なスクリプトが送信されず、ブラウザ上で「サイトＡ」のＷｅｂページから「サイトＢ」のＷｅｂページに不正なスクリプトが送り込まれる。よって、第２の類型のＸＳＳ攻撃は、端末装置１００からサーバ装置２２へのＨＴＴＰリクエストやサーバ装置２２から端末装置１００へのＨＴＴＰレスポンスを監視するだけでは、検出するのが難しい。
【００６７】
ＸＳＳ攻撃に対するセキュリティは、根本的には、サーバ装置２２が提供する「サイトＢ」の脆弱性を除去する、すなわち、入力されたデータを検査してスクリプトを排除するようプログラミングすることで、向上させることができる。しかし、端末装置１００のユーザは、「サイトＢ」の脆弱性の除去に直接関与することができない場合が多い。また、端末装置１００のユーザは、そのような脆弱性の存在を知らない場合も多い。そこで、第２の実施の形態では、端末装置１００がＸＳＳ攻撃のリスクを低減する機能を有する。
【００６８】
図６は、端末装置の機能例を示すブロック図である。
端末装置１００は、ブラウザ１２０、ローカルストレージ１２４、プロキシサーバ１３０および制御情報記憶部１３３を有する。ローカルストレージ１２４および制御情報記憶部１３３は、例えば、ＨＤＤ１０３に確保した記憶領域として実現される。ブラウザ１２０およびプロキシサーバ１３０は、例えば、ＣＰＵ１０１が実行するプログラムのモジュールとして実現される。端末装置１００ａ，１００ｂも、端末装置１００と同様のモジュール構成によって実現することができる。
【００６９】
ブラウザ１２０は、Ｗｅｂサーバと通信し、ユーザに対して視覚的ユーザインタフェース（ＵＩ：User Interface）を提供するＷｅｂブラウザである。ブラウザ１２０は、ＵＩ制御部１２１、スクリプト実行部１２２および通信部１２３を有する。
【００７０】
ＵＩ制御部１２１は、視覚的ユーザインタフェースとしてのＷｅｂページを制御する。ＵＩ制御部１２１は、ＨＴＭＬファイルを取得すると、ＨＴＭＬファイルの記載に基づいてＷｅｂページを描画（レンダリング）する。ＵＩ制御部１２１は、複数のウィンドウ（複数のタブであってもよい）を用いて、複数のＷｅｂページを同時にディスプレイ１１１に表示することが可能である。また、ＵＩ制御部１２１は、ユーザ操作を検出する。ユーザ操作には、ＵＲＬの入力、Ｗｅｂページ内のハイパーリンクのクリック、Ｗｅｂページ内の入力欄（フィールド）へのデータ入力などが含まれる。
【００７１】
スクリプト実行部１２２は、取得したＨＴＭＬファイルまたはＨＴＭＬファイルからリンクされたスクリプトファイルにスクリプトが含まれている場合、当該スクリプトを実行する。スクリプトは、例えば、高級言語で記載されたソースコードである。
【００７２】
スクリプトによって実行可能な処理には、ＨＴＴＰリクエストの送信が含まれる。送信したＨＴＴＰリクエストに対応して得られるＷｅｂページを、新たなウィンドウ（新たなタブであってもよい）を起動して表示することも可能である。ただし、セキュリティの観点から、スクリプトによって指定可能なアクセス先は、当該スクリプトとオリジンが同一のものに制限される。「オリジン」は、プロトコルスキームとホスト名とポート番号の組である。ＵＲＬがｈｔｔｐ：／／ｗｗｗ．ａ＊＊．ｃｏｍ／ｉｎｄｅｘ．ｈｔｍｌの場合、プロトコルスキームはｈｔｔｐであり、ホスト名はｗｗｗ．ａ＊＊．ｃｏｍであり、ポート番号は８０である（ポート番号が８０であるときはその記載を省略できる）。
【００７３】
また、スクリプトによって実行可能な処理には、後述するように、ブラウザ１２０に対応するローカルストレージ１２４へのアクセスが含まれる。スクリプトによって、ローカルストレージ１２４にデータを書き込み、ローカルストレージ１２４からデータを読み出すことができる。ただし、セキュリティの観点から、スクリプトによって読み出すことができるデータは、当該スクリプト自身または当該スクリプトとオリジンが同一の他のスクリプトによって書き込まれたデータに制限される。
【００７４】
通信部１２３は、ＵＩ制御部１２１で検出されたユーザ操作またはスクリプトによる指示に応じて、ＨＴＴＰリクエストを送信する。また、通信部１２３は、送信したＨＴＴＰリクエストに対して、ＨＴＴＰレスポンスを受信する。第２の実施の形態では、通信部１２３は、ＨＴＴＰリクエストをプロキシサーバ１３０に送信するように設定されている。ＨＴＴＰレスポンスは、プロキシサーバ１３０から受信することになる。
【００７５】
ローカルストレージ１２４は、ブラウザ１２０に対応して設けられた不揮発性の記憶領域である。ローカルストレージ１２４は、オリジン毎に区分して、キーバリュー形式のデータを記憶する。１つのオリジンに対して、例えば、１０ＭＢ程度のデータを記憶することができる。スクリプト実行部１２２は、キーとバリューを対応付けてローカルストレージ１２４に書き込むことができる。また、スクリプト実行部１２２は、キーを指定してローカルストレージ１２４からバリューを読み出すことができる。ローカルストレージ１２４に記憶された一のオリジンに関するデータは、スクリプト実行部１２２において当該オリジンに属するスクリプトが実行されたときのみ参照できる。なお、ローカルストレージ１２４に記憶されたデータは、ブラウザ１２０が終了しても保持される。
【００７６】
プロキシサーバ１３０は、ブラウザ１２０とサーバ装置２１，２２との間でＨＴＴＰリクエストやＨＴＴＰレスポンスを中継する。プロキシサーバ１３０は、アクセス転送部１３１および制御ページ生成部１３２を有する。
【００７７】
アクセス転送部１３１は、ブラウザ１２０からＨＴＴＰリクエストを受信すると、ＨＴＴＰリクエストの所定の位置に所定の文字列が含まれているか、すなわち、制御用のＨＴＴＰリクエストであるか判断する。所定の位置としては、例えば、ＵＲＬに含まれるパス名、ＵＲＬの末尾に付加されたハッシュ（「＃」以下の文字）やクエリ（「？」以下の文字）、ＨＴＴＰリクエストがＰＯＳＴである場合のボディなどが挙げられる。
【００７８】
制御用のＨＴＴＰリクエストでない場合、アクセス転送部１３１は、ＵＲＬに応じたサーバ装置にＨＴＴＰリクエストを転送する。ＨＴＴＰリクエストに応じてＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信すると、アクセス転送部１３１は、ブラウザ１２０にＨＴＴＰレスポンスを転送する。ただし、アクセス転送部１３１は、受信したＨＴＭＬファイルをキャッシュしてもよい。ブラウザ１２０から指定されたＵＲＬに対応するＨＴＭＬファイルがキャッシュ中である場合、アクセス転送部１３１は、ＨＴＴＰリクエストを転送せず、キャッシュされているＨＴＭＬファイルをブラウザ１２０に返信してもよい。
【００７９】
ＨＴＴＰレスポンスを送信するにあたり、アクセス転送部１３１は、ブラウザ１２０において同じオリジンのＷｅｂページを閲覧中であるか、すなわち、あるＷｅｂサイトに対する２回目以降のＨＴＴＰリクエストであるか判断する。２回目以降のＨＴＴＰリクエストであるか否かは、後述するアクセス情報テーブルを参照して判断できる。最初のＨＴＴＰリクエストである場合、アクセス転送部１３１は、取得したＨＴＭＬファイルに所定のスクリプトを挿入する。このスクリプトは、ブラウザ１２０に、上記の制御用のＨＴＴＰリクエストを送信させるものである。
【００８０】
一方、制御用のＨＴＴＰリクエストである場合、アクセス転送部１３１は、当該ＨＴＴＰリクエストを制御ページ生成部１３２に転送する。アクセス転送部１３１は、制御ページ生成部１３２からＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信し、当該ＨＴＴＰレスポンスをブラウザ１２０に転送する。ただし、アクセス転送部１３１を介さずに制御ページ生成部１３２からブラウザ１２０にＨＴＴＰリクエストが返信されてもよい。
【００８１】
制御ページ生成部１３２は、アクセス転送部１３１からＨＴＴＰリクエストを受信すると、制御ページを表示するためのＨＴＭＬファイルを生成し、当該ＨＴＭＬファイルを含むＨＴＴＰレスポンスをアクセス転送部１３１に送信する。制御ページは、ローカルストレージ１２４に書き込まれたデータを検査するスクリプトを含む。よって、制御ページは、検査ページと呼ぶこともできる。制御ページ生成部１３２は、アクセス転送部１３１から制御用のＨＴＴＰリクエストを受信したときに、後述するルールファイルに記載された最新の検査ルールをＨＴＭＬファイルに埋め込む。
【００８２】
制御ページのＵＲＬには、制御ページを呼び出した元のＷｅｂページと同じオリジンが含まれる。よって、ブラウザ１２０は、制御ページと元のＷｅｂページとはオリジンが同一であると認識する。ＨＴＭＬ５の仕様によれば、あるＷｅｂページのスクリプトは、オリジンが同一である他のＷｅｂページにおいて発生したローカルストレージの更新を検出することができる。ただし、ＨＴＭＬ５の仕様では、同じＷｅｂページ内で発生したローカルストレージの更新を検出できることは保証されていない。そこで、第２の実施の形態では、元のＷｅｂページとは別に、オリジンが同じ制御ページを用意している。
【００８３】
ブラウザ１２０において、制御ページは元のＷｅｂページとは別のウィンドウ（別のタブであってもよい）に表示される。制御ページは、ローカルストレージ１２４に書き込まれたデータを検査するスクリプトを含んでいればよく、表示すべき文字や画像を含まなくてもよい。制御ページを表示するウィンドウは、ユーザから認識されにくいように、元のＷｅｂページと比べて十分に小さいサイズで画面上に配置するようにしてもよい。
【００８４】
制御情報記憶部１３３は、アクセス転送部１３１から参照されるアクセス情報テーブルを記憶する。また、制御情報記憶部１３３は、制御ページ生成部１３２から参照されるルールファイルを記憶する。アクセス情報テーブルとルールファイルについては後述する。
【００８５】
図７は、アクセス情報テーブルの例を示す図である。
アクセス情報テーブル１３４は、制御情報記憶部１３３に格納されている。アクセス情報テーブル１３４は、ブラウザおよびオリジンの項目を有する。ブラウザの項目には、ブラウザ１２０の識別名が登録される。端末装置１００に複数のブラウザがインストールされている場合には、複数のブラウザの識別名がアクセス情報テーブル１３４に登録され得る。識別名には、ブラウザ１２０のブランド名やバージョン番号を含めてもよい。例えば、ブラウザ１２０の識別名が「ブラウザＡ」である。オリジンの項目には、ブラウザ１２０がアクセス中のＷｅｂサイトのオリジンが登録される。
【００８６】
図７に示したアクセス情報テーブル１３４の例は、ブラウザ１２０が、ｈｔｔｐ：／／ｗｗｗ．ａ＊＊．ｃｏｍ／を含むＵＲＬのＷｅｂページとｈｔｔｐ：／／ｈｏｓｔ．ｂ＊＊．ｏｒｇ／を含むＵＲＬのＷｅｂページを表示していることを示している。
【００８７】
あるオリジンを含むＵＲＬを指定したＨＴＴＰリクエストをアクセス転送部１３１が受信すると、アクセス転送部１３１によって当該オリジンがアクセス情報テーブル１３４に登録される。アクセス情報テーブル１３４に登録されたオリジンは、登録から一定時間経過したときに削除されてもよい。また、あるブラウザのウィンドウが閉じたことまたはブラウザが終了したことを検知し、検知したときに当該ブラウザに対応するオリジンをアクセス情報テーブル１３４から削除するようにしてもよい。
【００８８】
図８は、ルールファイルの例を示す図である。
ルールファイル１３５は、制御情報記憶部１３３に格納されている。ルールファイル１３５は、ＸＳＳ攻撃のリスクがあるデータに含まれる文字を示す検査ルールを記載する。検査ルールは、例えば、スクリプトに用いられることが多くスクリプト以外のデータに用いられることが少ない文字を示す。検査ルールは、例えば、正規表現で表される。検査ルールが埋め込まれた制御ページを表示したブラウザ１２０は、ローカルストレージ１２４に書き込まれたデータと検査ルールとを照合し、書き込まれたデータが検査ルールに該当する場合、ＸＳＳ攻撃のリスクがあると判定する。
【００８９】
図８に示したルールファイル１３５の例は、「＜」、「＞」、「”」、「’」、「＆」および「ｓｃｒｉｐｔ」の少なくとも１つを含むデータを検出することを示す。「＜」、「＞」、「”」、「’」および「＆」は、ＨＴＭＬで特殊な意味をもつ文字である。これらの特殊文字は、そのままＷｅｂページに埋め込むことは好ましくなく、本来はローカルストレージ１２４に書き込まれる前にエスケープ処理する（安全な符号化方法で符号化する）ことが好ましい。また、「ｓｃｒｉｐｔ」は、ＨＴＭＬのスクリプトタグに用いられる文字列である。「ｓｃｒｉｐｔ」を含むデータは、スクリプトである可能性が高い。
【００９０】
次に、ローカルストレージへのデータの書き込みを検出して検査する流れを説明する。
図９は、Ｗｅｂアクセスの例を示すシーケンス図である。
端末装置１００の電源がＯＮになった後、プロキシサーバ１３０が自動的に起動する。このとき、プロキシサーバ１３０は、ユーザから入力されたパスワードが予め登録されたものと一致する場合のみ、すなわち、ユーザ認証に成功した場合のみ、プロキシサーバ１３０の全ての機能を利用可能にしてもよい。ユーザ認証に失敗した場合、プロキシサーバ１３０の機能の少なくとも一部が制限されてもよい。
【００９１】
ブラウザ１２０は、ハイパーリンクのクリックや、フォームに入力されたデータを送信する送信ボタンの押下などのユーザ操作を検出する。すると、ブラウザ１２０は、ユーザ操作で指定されたＵＲＬを含むＨＴＴＰリクエスト（Ｗｅｂページ要求）をプロキシサーバ１３０に送信する（Ｓ１０）。プロキシサーバ１３０は、サーバ装置２２にＷｅｂページ要求を転送する（Ｓ１１）。サーバ装置２２は、指定されたＵＲＬに対応するＷｅｂページのＨＴＭＬファイルを生成し、ＨＴＭＬファイルを含むＨＴＴＰレスポンスをプロキシサーバ１３０に送信する（Ｓ１２）。プロキシサーバ１３０は、ＷｅｂページのＨＴＭＬファイルにスクリプトを付加し、ブラウザ１２０に転送する（Ｓ１３）。
【００９２】
ブラウザ１２０は、ステップＳ１３のＷｅｂページに含まれるスクリプトを実行することで、制御用のＨＴＴＰリクエスト（制御ページ要求）をプロキシサーバ１３０に送信する（Ｓ１４）。制御ページ要求では、ステップＳ１０のＷｅｂページ要求と同じオリジンおよび所定の文字列を含むＵＲＬが指定される。プロキシサーバ１３０は、制御ページ要求に応じて、制御ページのＨＴＭＬファイルを生成し、制御ページのＨＴＭＬファイルを含むＨＴＴＰレスポンスをブラウザ１２０に送信する（Ｓ１５）。なお、制御ページは、ブラウザ１２０においてオリジン毎に１つ表示される。
【００９３】
ブラウザ１２０は、ステップＳ１５の制御ページに含まれるスクリプトを実行することで、ローカルストレージ１２４の更新を監視する。その後、ブラウザ１２０は、ステップＳ１３のＷｅｂページまたはこれと同一オリジンの他のＷｅｂページに含まれるスクリプトを実行することで、ローカルストレージ１２４にデータ（以下ではローカルデータと呼ぶことがある）を保存する（Ｓ１６）。すると、ブラウザ１２０は、制御ページのスクリプトに基づいてローカルストレージ１２４の更新を検出する（Ｓ１７）。このとき、ブラウザ１２０は、書き込まれたローカルデータを取得する。
【００９４】
そして、ブラウザ１２０は、書き込まれたローカルデータを、制御ページに埋め込まれた検査ルールに基づいて検査する（Ｓ１８）。書き込まれたローカルデータが検査ルールに該当する場合（例えば、ローカルデータがスクリプトである可能性がある場合）、ブラウザ１２０は、ＸＳＳ攻撃のリスクがあると判定する。ＸＳＳ攻撃のリスクがある場合、例えば、ブラウザ１２０は、後述するようにユーザに対して警告を行う。
【００９５】
図１０は、Ｗｅｂページに付加されるスクリプトの例を示す図である。
ＨＴＭＬファイル４１は、例えば、上記のステップＳ１３においてプロキシサーバ１３０からブラウザ１２０に送信される。ＨＴＭＬファイル４１のスクリプトは、関数ｏｐｅｎＣｈｅｃｋＰａｇｅ（）および関数ｓｔｏｒａｇｅＵｐｄａｔｅ（）を含む。
【００９６】
関数ｏｐｅｎＣｈｅｃｋＰａｇｅ（）は、プロキシサーバ１３０によってＨＴＭＬファイル４１に挿入されたものである。関数ｏｐｅｎＣｈｅｃｋＰａｇｅ（）は、ＨＴＭＬファイル４１に基づくＷｅｂページが表示されるときに自動的に実行される。関数ｏｐｅｎＣｈｅｃｋＰａｇｅ（）は、ＨＴＭＬファイル４１のオリジンに所定のパス名（例えば、／ｃｈｅｃｋ／ｃｈｅｃｋＰａｇｅ．ｈｔｍｌ）を連結したＵＲＬを生成する。このパス名が示すＨＴＭＬファイルは、サーバ装置２２に実在しないものでもよい。その場合、このＵＲＬは仮想的なＵＲＬであると言うことができる。関数ｏｐｅｎＣｈｅｃｋＰａｇｅ（）は、生成したＵＲＬに対応するＷｅｂページを、ＨＴＭＬファイル４１に基づくＷｅｂページとは異なるウィンドウ（異なるタブでもよい）に表示させる。
【００９７】
関数ｓｔｏｒａｇｅＵｐｄａｔｅ（）は、サーバ装置２２から取得したＨＴＭＬファイルに元々記述されていたものである。関数ｓｔｏｒａｇｅＵｐｄａｔｅ（）は、キーとバリューの組をローカルストレージ１２４に格納する。
【００９８】
図１１は、制御ページに含まれるスクリプトの例を示す図である。
ＨＴＭＬファイル４２は、例えば、上記のステップＳ１５においてプロキシサーバ１３０からブラウザ１２０に送信される。ＨＴＭＬファイル４２のスクリプトは、変数ｅＫｅｙ、変数ｅＶａｌｕｅ、変数ｅＳｔｏｒａｇｅＡｒｅａ、定数ｘｓｓＲｕｌｅ、イベントリスナ登録処理、関数ｃｈｅｃｋＸｓｓ（）、関数ａｌｅｒｔＴｏＵｓｅｒ（）および関数ｕｐｄａｔｅＳｔｏｒａｇｅ（）を含む。
【００９９】
変数ｅＫｅｙは、ローカルストレージ１２４に書き込まれたローカルデータのキーを保持する。変数ｅＶａｌｕｅは、ローカルストレージ１２４に書き込まれたローカルデータのバリューを保持する。変数ｅＳｔｏｒａｇｅＡｒｅａは、ローカルストレージ１２４に書き込まれたローカルデータの位置を示す。定数ｘｓｓＲｕｌｅは、ＨＴＭＬファイル４２が生成されるときに埋め込まれた検査ルールを示す。前述のルールファイル１３５に記述された検査ルールが、ＨＴＭＬファイル４２にコピーされている。
【０１００】
イベントリスナ登録処理は、制御ページが表示されるときに実行される。イベントリスナ登録処理は、ＨＴＭＬファイル４２と同じオリジンに関するローカルデータがローカルストレージ１２４に書き込まれたときに、書き込まれたローカルデータを含む更新イベント情報を取得できるように設定する。更新イベント情報を取得すると、変数ｅＫｅｙ、変数ｅＶａｌｕｅおよび変数ｅＳｔｏｒａｇｅＡｒｅａが更新される。
【０１０１】
そして、バリュー（変数ｅＶａｌｕｅの文字列）が検査ルールに適合するか否かが、関数ｃｈｅｃｋＸｓｓ（）を呼び出して判断される。バリューが検査ルールに適合する場合、関数ａｌｅｒｔＴｏＵｓｅｒ（）が呼び出される。また、キー（変数ｅＫｅｙの文字列）が検査ルールに適合するか否かが、関数ｃｈｅｃｋＸｓｓ（）を呼び出して判断される。キーが検査ルールに適合する場合、関数ａｌｅｒｔＴｏＵｓｅｒ（）が呼び出される。
【０１０２】
関数ｃｈｅｃｋＸｓｓ（）は、指定されたキーまたはバリューと正規表現で表された検査ルールとを照合し、キーまたはバリューが検査ルールを満たすか否かを示す論理値を出力する。キーまたはバリューが、検査ルールで指定された文字または文字列を含む場合は「Ｔｒｕｅ」が出力され、含まない場合は「Ｆａｌｓｅ」が出力される。関数ａｌｅｒｔＴｏＵｓｅｒ（）は、ローカルストレージ１２４に書き込まれたローカルデータにＸＳＳ攻撃のリスクがある旨の警告を、メッセージウィンドウに表示する。また、関数ａｌｅｒｔＴｏＵｓｅｒ（）は、関数ｕｐｄａｔｅＳｔｏｒａｇｅ（）を呼び出す。
【０１０３】
関数ｕｐｄａｔｅＳｔｏｒａｇｅ（）は、バリューにＸＳＳ攻撃のリスクがある場合、ローカルストレージ１２４に格納されている当該バリューを安全な所定の文字列に書き換える。このとき、関数ｕｐｄａｔｅＳｔｏｒａｇｅ（）は、バリューを書き換える前に、書き換え可否を選択するメッセージウィンドウを表示してユーザの許可を得ることが好ましい。ユーザがバリューの書き換えを拒否した場合、書き換えは行わなくてよい。
【０１０４】
また、関数ｕｐｄａｔｅＳｔｏｒａｇｅ（）は、キーにＸＳＳ攻撃のリスクがある場合、ローカルストレージ１２４に書き込まれたローカルデータを削除する。このとき、関数ｕｐｄａｔｅＳｔｏｒａｇｅ（）は、ローカルデータを削除する前に、削除可否を選択するメッセージウィンドウを表示してユーザの許可を得ることが好ましい。ユーザがローカルデータの削除を拒否した場合、削除は行わなくてよい。
【０１０５】
図１２は、プロキシ転送処理の手順例を示すフローチャートである。
プロキシ転送処理は、プロキシサーバ１３０によって実行される。
（Ｓ２０）アクセス転送部１３１は、ＨＴＴＰリクエストを受信する。
【０１０６】
（Ｓ２１）アクセス転送部１３１は、ステップＳ２０で受信したＨＴＴＰリクエストが制御ページ要求であるか判断する。制御ページ要求であるか否かは、例えば、ＵＲＬに所定のパス名が含まれているかによって判断できる。また、例えば、ＵＲＬに所定のハッシュまたはクエリが含まれているか、ＨＴＴＰリクエストの種類がＰＯＳＴでありボディに所定の文字列が含まれているかによって判断することもできる。制御ページ要求である場合はステップＳ２７に処理が進み、それ以外の場合はステップＳ２２に処理が進む。
【０１０７】
（Ｓ２２）アクセス転送部１３１は、受信したＨＴＴＰリクエストを、ＵＲＬに応じたサーバ装置に転送する。アクセス転送部１３１は、転送したＨＴＴＰリクエストに対する応答として、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信する。
【０１０８】
（Ｓ２３）アクセス転送部１３１は、ブラウザ１２０が、ステップＳ２２で取得したＨＴＭＬファイルと同じオリジンのＷｅｂサイトにアクセス済みであるか判断する。具体的には、アクセス転送部１３１は、ブラウザ１２０と対応付けて、取得したＨＴＭＬファイルのオリジンがアクセス情報テーブル１３４に登録されているか判断する。登録されている場合はステップＳ２６に処理が進み、登録されていない場合はステップＳ２４に処理が進む。なお、アクセス情報テーブル１３４のオリジンは、一定時間の経過、制御ページのクローズ、ブラウザ１２０の終了などに応じて削除され得る。
【０１０９】
（Ｓ２４）アクセス転送部１３１は、ブラウザ１２０と対応付けて、取得したＨＴＭＬファイルのオリジンをアクセス情報テーブル１３４に登録する。
（Ｓ２５）アクセス転送部１３１は、取得したＨＴＭＬファイルに所定のスクリプトを付加する。付加するスクリプトは、ステップＳ２２で取得したＨＴＭＬファイルと同じオリジンを含むＵＲＬを指定したものであって所定の文字列を含むＨＴＴＰリクエストを生成する処理を示す。付加するスクリプトは、例えば、図１０に示したＨＴＭＬファイル４１に含まれる関数ｏｐｅｎＣｈｅｃｋＰａｇｅ（）である。
【０１１０】
（Ｓ２６）アクセス転送部１３１は、何れかのサーバ装置から受信したＨＴＭＬファイルを含むＨＴＴＰレスポンスをブラウザ１２０に転送する。ただし、上記のステップＳ２５において、ＨＴＭＬファイルに所定のスクリプトが付加されていることがある。
【０１１１】
（Ｓ２７）アクセス転送部１３１は、ＨＴＴＰリクエストを制御ページ生成部１３２に転送する。制御ページ生成部１３２は、制御ページを示すＨＴＭＬファイルを生成し、生成したＨＴＭＬファイルを含むＨＴＴＰレスポンスをアクセス転送部１３１に送信する。例えば、制御ページ生成部１３２は、制御情報記憶部１３３からルールファイル１３５を読み出す。そして、制御ページ生成部１３２は、予め用意したＨＴＭＬファイルのテンプレートに、ルールファイル１３５に記載された検査ルールを埋め込むことによって、制御ページを示すＨＴＭＬファイルを生成する。これにより、ローカルストレージ１２４を利用したＸＳＳ攻撃に新たな手法が発見された場合であっても、ユーザはルールファイル１３５を書き換えることで、検査方法を柔軟に変更することができる。
【０１１２】
（Ｓ２８）アクセス転送部１３１は、制御ページ生成部１３２から受信したＨＴＭＬファイルを含むＨＴＴＰレスポンスをブラウザ１２０に転送する。このＨＴＭＬファイルには、ローカルストレージ１２４の更新を検出し、検査ルールに従って、ローカルストレージ１２４に書き込まれたローカルデータを検査するスクリプトが含まれている。
【０１１３】
図１３は、ブラウザアクセス処理の手順例を示すフローチャートである。
ブラウザアクセス処理は、ブラウザ１２０によって実行される。
（Ｓ３０）通信部１２３は、プロキシサーバ１３０にＨＴＴＰリクエストを送信する。
【０１１４】
（Ｓ３１）通信部１２３は、プロキシサーバ１３０から、ＨＴＭＬファイルを含むＨＴＴＰレスポンスを受信する。ＵＩ制御部１２１は、取得したＨＴＭＬファイルに基づいてレンダリングを行い、あるウィンドウ（タブでもよい）にＷｅｂページを表示する。
【０１１５】
（Ｓ３２）スクリプト実行部１２２は、ステップＳ３１で取得したＨＴＭＬファイルに含まれるスクリプトを実行する。ここでは、スクリプト実行部１２２は、取得したＨＴＭＬファイルと同じオリジンを含むＵＲＬを指定しており所定の文字列を含むＨＴＴＰリクエストを生成する。通信部１２３は、スクリプト実行部１２２が生成したＨＴＴＰリクエストをプロキシサーバ１３０に送信する。このＨＴＴＰリクエストは、制御ページを示すＨＴＭＬファイルを取得するための制御ページ要求に相当する。
【０１１６】
（Ｓ３３）通信部１２３は、ステップＳ３２で送信したＨＴＴＰリクエストの応答として、ＨＴＭＬファイルを含むＨＴＴＰレスポンスをプロキシサーバ１３０から受信する。ＵＩ制御部１２１は、ステップＳ３１のＷｅｂページが表示されたウィンドウとは異なる新たなウィンドウ（新たなタブでもよい）を起動する。そして、ＵＩ制御部１２１は、取得したＨＴＭＬファイルに基づいてレンダリングを行い、新たなウィンドウに制御ページを表示する。ただし、制御ページには文字や画像が含まれない可能性がある。
【０１１７】
図１４は、ブラウザ検査処理の手順例を示すフローチャートである。
ブラウザ検査処理は、ブラウザ１２０によって実行される。
（Ｓ４０）スクリプト実行部１２２は、前述のステップＳ３３で取得したＨＴＭＬファイルに含まれるスクリプトに従って、ローカルストレージ１２４の更新を監視する。制御ページとオリジンが同一の他のＷｅｂページによってローカルストレージ１２４が更新されると、スクリプト実行部１２２は、ローカルストレージ１２４の更新を検出する。スクリプト実行部１２２は、書き込まれたローカルデータを取得する。
【０１１８】
（Ｓ４１）スクリプト実行部１２２は、取得したローカルデータに含まれるバリューと前述のステップＳ２７で埋め込まれた検査ルールとを照合する。
（Ｓ４２）スクリプト実行部１２２は、バリューが検査ルールに該当するか、すなわち、バリューにＸＳＳ攻撃のリスクがあるか判断する。バリューにＸＳＳ攻撃のリスクがある場合はステップＳ４３に処理が進み、無い場合はステップＳ４５に処理が進む。
【０１１９】
（Ｓ４３）スクリプト実行部１２２は、ユーザに対してＸＳＳ攻撃のリスクを通知する。例えば、スクリプト実行部１２２は、ポップアップ型のメッセージウィンドウに、ＸＳＳ攻撃のリスクがある旨の警告を表示する。
【０１２０】
（Ｓ４４）スクリプト実行部１２２は、ローカルストレージ１２４に今回書き込まれたバリューを、検査ルールが示す文字を含まない安全な所定の文字列に書き換える。ただし、スクリプト実行部１２２は、バリューを書き換えることについてユーザの許可を得ることが好ましい。また、スクリプト実行部１２２は、バリューを直接書き換える代わりに、ユーザにバリューを書き換えるよう促してもよい。例えば、スクリプト実行部１２２は、ローカルデータを編集するウィンドウを表示することが考えられる。
【０１２１】
（Ｓ４５）スクリプト実行部１２２は、取得したローカルデータに含まれるキーと前述のステップＳ２７で埋め込まれた検査ルールとを照合する。
（Ｓ４６）スクリプト実行部１２２は、キーが検査ルールに該当するか、すなわち、キーにＸＳＳ攻撃のリスクがあるか判断する。キーにＸＳＳ攻撃のリスクがある場合はステップＳ４７に処理が進み、無い場合はブラウザ検査処理が終了する。
【０１２２】
（Ｓ４７）スクリプト実行部１２２は、ユーザに対してＸＳＳ攻撃のリスクを通知する。例えば、スクリプト実行部１２２は、ポップアップ型のメッセージウィンドウに、ＸＳＳ攻撃のリスクがある旨の警告を表示する。
【０１２３】
（Ｓ４８）スクリプト実行部１２２は、今回書き込まれたローカルデータをローカルストレージ１２４から削除する。ただし、スクリプト実行部１２２は、ローカルデータを削除することについてユーザの許可を得ることが好ましい。また、スクリプト実行部１２２は、ローカルデータを直接削除する代わりに、ユーザにローカルデータを編集または削除するよう促してもよい。例えば、スクリプト実行部１２２は、ローカルデータを編集または削除するウィンドウを表示することが考えられる。
【０１２４】
図１５は、ウィンドウの表示例を示す図である。
ローカルストレージ１２４に書き込まれたキーまたはバリューが検査ルールに該当する場合、ブラウザ１２０は、ウィンドウ５１を表示する。ウィンドウ５１は、ローカルストレージ１２４に格納されたローカルデータにＸＳＳ攻撃のリスクがある旨を警告するポップアップ型のメッセージウィンドウである。ユーザがウィンドウ５１のボタン「ＯＫ」を押下すると、ブラウザ１２０はウィンドウ５１を消す。
【０１２５】
その後、バリューが検査ルールに該当する場合、ブラウザ１２０は、ウィンドウ５２を表示する。ウィンドウ５２は、バリューをリスクの小さい所定の文字列に書き換えることを許可するか否か選択するポップアップ型のメッセージウィンドウである。ユーザがウィンドウ５２のボタン「ＹＥＳ」を押下すると、ブラウザ１２０は、ローカルストレージ１２４に記憶されたバリューを書き換える。一方、ユーザがウィンドウ５２のボタン「ＮＯ」を押下すると、ブラウザ１２０は、バリューを書き換えない。
【０１２６】
キーが検査ルールに該当する場合、ブラウザ１２０は、ウィンドウ５３を表示する。ウィンドウ５３は、書き込まれたローカルデータをローカルストレージ１２４から削除することを許可するか否か選択するポップアップ型のメッセージウィンドウである。ユーザがウィンドウ５３のボタン「ＹＥＳ」を押下すると、ブラウザ１２０は、ローカルストレージ１２４からローカルデータを削除する。一方、ユーザがウィンドウ５３のボタン「ＮＯ」を押下すると、ブラウザ１２０は、ローカルデータを削除しない。
【０１２７】
第２の実施の形態の情報処理システムによれば、プロキシサーバ１３０によって、ＨＴＴＰリクエストに対応するＨＴＴＰレスポンスに、制御ページ要求を送信するスクリプトが挿入される。ブラウザ１２０が制御ページ要求を送信すると、プロキシサーバ１３０によって、ローカルストレージ１２４に書き込まれるデータを検査する制御ページのためのＨＴＴＰレスポンスが生成されてブラウザ１２０に送信される。これにより、不正なスクリプトがローカルストレージ１２４に書き込まれたことを検出でき、ローカルストレージ１２４を利用したＸＳＳ攻撃のリスクを低減することができる。よって、情報漏洩のリスクを低減できるなど、セキュリティを向上させることができる。
【０１２８】
また、元のＷｅｂページと制御ページとが同じＷｅｂサイトに関するＷｅｂページと認識されるように、元のＷｅｂページに挿入されたスクリプトによって制御ページ要求が生成される。これにより、ブラウザ１２０は、セキュリティ上の制限に反することなく制御ページ要求を送信できる。また、制御ページのスクリプトは、同じＷｅｂサイトに関する他のＷｅｂページによってローカルストレージ１２４が更新されたことを検出できる。よって、ブラウザ１２０を改変しなくても、プロキシサーバ１３０を用いることで、ブラウザ１２０の既存の仕様や制限のもとでＸＳＳ攻撃のリスクを低減することができる。
【０１２９】
なお、第１の実施の形態の情報処理は、ローカルストレージ管理装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、サーバ装置２１，２２や端末装置１００，１００ａ，１００ｂにプログラムを実行させることで実現できる。
【０１３０】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【０１３１】
２  サーバ
１０  ローカルストレージ管理装置
１１  通信部
１２  制御部
１３  ブラウザ
１３ａ  ローカルストレージ
１４，１６  リクエスト
１５，１５ａ，１７ａ  レスポンス
１５ｂ，１７ｂ  スクリプト
【図１】
2016173627.tif 000003
【図２】
2016173627.tif 000004
【図３】
2016173627.tif 000005
【図４】
2016173627.tif 000006
【図５】
2016173627.tif 000007
【図６】
2016173627.tif 000008
【図７】
2016173627.tif 000009
【図８】
2016173627.tif 000010
【図９】
2016173627.tif 000011
【図１０】
2016173627.tif 000012
【図１１】
2016173627.tif 000013
【図１２】
2016173627.tif 000014
【図１３】
2016173627.tif 000015
【図１４】
2016173627.tif 000016
【図１５】
2016173627.tif 000017