(57)【特許請求の範囲】
【請求項１】
動的言語値内のセキュリティラベルを符号化する方法であって、
符号化されたラベルを記憶するために、前記動的言語値内のいくつかのビットを割り当てるステップと、
セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、前記割り当てられたビット内の1ビットを確保するステップと、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けするステップであって、前記セキュリティラベルが前記第1のモードまたは前記第2のモードのいずれかで符号化される、ステップと
を含み、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けするステップが、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ないとき、前記第1のモードで動的言語ラベルを符号化するステップを含む、方法。
【請求項２】
前記方法が、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された動的言語またはスクリプト言語を使用して実施される、請求項1に記載の方法。
【請求項３】
動的言語値内のセキュリティラベルを符号化する方法であって、
符号化されたラベルを記憶するために、前記動的言語値内のいくつかのビットを割り当てるステップと、
セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、前記割り当てられたビット内の1ビットを確保するステップと、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けするためのステップであって、前記セキュリティラベルが前記第1のモードまたは前記第2のモードのいずれかで符号化される、ステップと、
前記確保されたビットが前記第1のモードが選択されたことを示すか、または前記第2のモードが選択されたことを示すかを判定するステップと、
前記第1のモードが選択されたことを前記確保されたビットが示すと判定されたとき、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行するステップと、
前記第2のモードが選択されたことを前記確保されたビットが示すと判定されたとき、前記セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行するステップと、
を含む、方法。
【請求項４】
前記方法が、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された動的言語またはスクリプト言語を用いて実施される、請求項3に記載の方法。
【請求項５】
メモリと、
前記メモリに結合されたプロセッサであって、前記プロセッサが動的言語値内のセキュリティラベルを符号化するための動作を実行するようにプロセッサ実行可能命令で構成され、前記動作が、
符号化されたラベルを記憶するために、前記動的言語値内のいくつかのビットを割り当てることと、
前記セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、前記割り当てられたビット内の1ビットを確保することと、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けすることであって、前記セキュリティラベルが前記第1のモードまたは前記第2のモードのいずれかで符号化されることと、
を含み、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けすることが、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ないとき、前記第1のモードで動的言語ラベルを符号化することを含む、
コンピューティングデバイス。
【請求項６】
前記動的言語値内のいくつかのビットを割り当てることが、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語にいくつかのビットを割り当てることを含むように、前記プロセッサがプロセッサ実行可能命令で構成される、請求項5に記載のコンピューティングデバイス。
【請求項７】
メモリと、
前記メモリに結合されたプロセッサであって、前記プロセッサが動的言語値内のセキュリティラベルを符号化するための動作を実行するようにプロセッサ実行可能命令で構成され、前記動作が、
符号化されたラベルを記憶するために、前記動的言語値内のいくつかのビットを割り当てることと、
前記セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、前記割り当てられたビット内の1ビットを確保することと、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けすることであって、前記セキュリティラベルが前記第1のモードまたは前記第2のモードのいずれかで符号化されることと、
前記確保されたビットが前記第1のモードが選択されたことを示すか、または前記第2のモードが選択されたことを示すかを判定することと、
前記第1のモードが選択されたことを前記確保されたビットが示すと判定されたとき、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行することと、
前記第2のモードが選択されたことを前記確保されたビットが示すと判定されたとき、前記セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行することと
を含む、コンピューティングデバイス。
【請求項８】
前記動的言語値内のいくつかのビットを割り当てることが、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語内のいくつかのビットを割り当てることを含むように、前記プロセッサがプロセッサ実行可能ソフトウェア命令で構成された、請求項7に記載のコンピューティングデバイス。
【請求項９】
動的言語値内のセキュリティラベルを符号化するための動作をプロセッサに実行させるように構成された、プロセッサ実行可能ソフトウェア命令を記憶しているコンピュータ可読記憶媒体であって、前記動作が、
符号化されたラベルを記憶するために、前記動的言語値内のいくつかのビットを割り当てることと、
前記セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、前記割り当てられたビット内の1ビットを確保することと、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けすることであって、前記セキュリティラベルが前記第1のモードまたは前記第2のモードのいずれかで符号化されることと、
を含み、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けすることが、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ないとき、前記第1のモードで動的言語ラベルを符号化することを含む、
コンピュータ可読記憶媒体。
【請求項１０】
前記動的言語値内のいくつかのビットを割り当てることが、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語内のいくつかのビットを割り当てることを含むような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項9に記載のコンピュータ可読記憶媒体。
【請求項１１】
動的言語値内のセキュリティラベルを符号化するための動作をプロセッサに実行させるように構成された、プロセッサ実行可能ソフトウェア命令を記憶しているコンピュータ可読記憶媒体であって、前記動作が、
符号化されたラベルを記憶するために、前記動的言語値内のいくつかのビットを割り当てることと、
前記セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、前記割り当てられたビット内の1ビットを確保することと、
発信ドメインを識別するセキュリティラベルで前記動的言語値をタグ付けすることであって、前記セキュリティラベルが前記第1のモードまたは前記第2のモードのいずれかで符号化されることと、
前記確保されたビットが前記第1のモードが選択されたことを示すか、または前記第2のモードが選択されたことを示すかを判定することと、
前記第1のモードが選択されたことを前記確保されたビットが示すと判定されたとき、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行することと、
前記第2のモードが選択されたことを前記確保されたビットが示すと判定されたとき、前記セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行することと
を含む、コンピュータ可読記憶媒体。
【請求項１２】
前記動的言語値内のいくつかのビットを割り当てることが、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語内のいくつかのビットを割り当てることを含むような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項11に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれている、2011年11月7日に出願された「Encoding Labels in JavaScript Values to Capture Information Flows」という名称の米国仮特許出願第61/556,658号の優先権の利益を主張するものである。
【背景技術】
【０００２】
近年、動的スクリプト言語(たとえば、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Rubyなど)は、著しくより強力になっており、その結果、今ではオンラインおよびウェブベースのソフトウェアアプリケーションを実装するために、より広く使用されている。今では、動的スクリプト言語は、通常、高水準ソフトウェア言語、柔軟なタイピングシステム、広範なセットのライブラリ、および、他のウェブベースシステムとの統合を強力にサポートする他の特徴に関連するいくつかの特徴を含む。これらおよび他の理由で、動的スクリプト言語は、今では大部分のWeb2.0アプリケーションによって使用され、人気が高まっている。
【０００３】
オンラインおよびウェブベースのソフトウェア開発において、クライアントアプリケーション(たとえば、ウェブページ、ブラウザなど)にサードパーティスクリプトを埋め込むことが増える傾向にある。埋込み型スクリプトは、コンテンツおよび実行可能コード(たとえば、広告バナー、ストックティッカなど)を取り出し、サードパーティのサイト上に配置するために使用することができる。埋込み型スクリプトはまた、2つ以上のソースからのデータ、コード、特徴、サービス、および/または機能を組み合わせて、新しいサービスまたはアプリケーションを作成するウェブページまたはアプリケーションである、マッシュアップを実装するために使用することができる。多くの動的スクリプト言語は、これらの増える傾向をサポートする特徴を含み、その結果、ウェブサイトにスクリプトを埋め込むためにより頻繁に使用されている。これらの埋込み型サードパーティスクリプトは、攻撃者が言語の脆弱性を利用して機密情報を収集し、それを攻撃者が制御するサーバに送ることを可能にする悪意のあるコードを含む可能性がある。スクリプト言語およびサードパーティスクリプト言語を埋め込むアプリケーションのセキュリティを改善することは、一層重要な設計基準になっている。
【発明の概要】
【課題を解決するための手段】
【０００４】
様々な態様は、ホストサーバへの返信を許可される情報のタイプを限定しながら、ソフトウェアクライアント内でクロススクリプト通信を可能にするように構成された、システム、方法、およびデバイスを含む。一態様では、動的言語値内のセキュリティラベルを符号化する方法は、符号化されたラベルを記憶するために動的言語値内のいくつかのビットを割り当てること、セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、割り当てられたビット内の1ビットを確保すること、および発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けすることを含むことができ、セキュリティラベルは第1のモードまたは第2のモードのいずれかで符号化される。一態様では、方法は、確保されたビットが第1のモードが選択されたことを示すか、または第2のモードが選択されたことを示すかを判定すること、第1のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行すること、および第2のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行することをさらに含むことができる。一態様では、発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けすることは、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ない場合、第1のモードで動的言語値を符号化することを含むことができる。一態様では、符号化されたラベルを記憶するために動的言語値内のいくつかのビットを割り当てることは、符号化されたラベルを記憶するためにJavaScript値内でいくつかのビットを割り当てることを含むことができる。一態様では、方法は、たとえば、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、ならびにJava(登録商標)および.NET言語を含む、任意の動的言語またはスクリプト言語を使用して実施することができる。
【０００５】
さらなる態様は、符号化されたラベルを記憶するために動的言語値内のいくつかのビットを割り当てるための手段、セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、割り当てられたビット内の1ビットを確保するための手段、および発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けするための手段を含むコンピューティングデバイスを含み、セキュリティラベルは第1のモードまたは第2のモードのいずれかで符号化される。一態様では、コンピューティングデバイスは、確保されたビットが第1のモードが選択されたことを示すか、または第2のモードが選択されたことを示すかを判定するための手段、第1のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行するための手段、および第2のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行するための手段を含む。さらなる態様では、発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けするための手段は、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ない場合、第1のモードで動的言語ラベルを符号化するための手段を含むことができる。さらなる態様では、動的言語値内のいくつかのビットを割り当てるための手段は、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語内のいくつかのビットを割り当てるための手段を含むことができる。
【０００６】
さらなる態様は、符号化されたラベルを記憶するために動的言語値内のいくつかのビットを割り当てること、セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、割り当てられたビット内の1ビットを確保すること、および発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けすることを含むことができる、動的言語値内のセキュリティラベルを符号化するための動作を実行するように、プロセッサ実行可能命令で構成されたプロセッサを含むコンピューティングデバイスを含み、セキュリティラベルは第1のモードまたは第2のモードのいずれかで符号化される。一態様では、プロセッサは、確保されたビットが第1のモードが選択されたことを示すか、または第2のモードが選択されたことを示すかを判定すること、第1のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行すること、および第2のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行することをさらに含むことができる動作を実行するように、プロセッサ実行可能命令で構成することができる。さらなる態様では、プロセッサは、発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けすることが、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ない場合、第1のモードで動的言語ラベルを符号化することを含むように、プロセッサ実行可能命令で構成することができる。さらなる態様では、プロセッサは、動的言語値内のいくつかのビットを割り当てることが、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語内のいくつかのビットを割り当てることを含むように、プロセッサ実行可能命令で構成することができる。
【０００７】
さらなる態様は、動的言語値内のセキュリティラベルを符号化するための動作をプロセッサに実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記憶した非一時的コンピュータ可読記憶媒体を含み、動作は、符号化されたラベルを記憶するために動的言語値内のいくつかのビットを割り当てること、セキュリティラベルが第1のモードで符号化されるか、または第2のモードで符号化されるかを示すために、割り当てられたビット内の1ビットを確保すること、および発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けすることを含み、セキュリティラベルは第1のモードまたは第2のモードのいずれかで符号化される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、確保されたビットが第1のモードが選択されたことを示すか、または第2のモードが選択されたことを示すかを判定すること、第1のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが1ホットビットとして符号化されていると識別し、ビット単位のOR演算を実行すること、および第2のモードが選択されたことを確保されたビットが示すと判定された場合、セキュリティラベルが実際のラベル情報を記憶するラベルマネージャデータ構造への参照であると識別し、メモリ読取り動作を実行することを含む動作をプロセッサに実行させるように、さらに構成することができる。さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、発信ドメインを識別するセキュリティラベルで動的言語値をタグ付けすることが、他のドメインから発信するスクリプトからの情報にアクセスするスクリプトの数が割り当てられたビットの数よりも少ない場合、第1のモードで動的言語値を符号化することを含むような動作をプロセッサに実行させるように、さらに構成することができる。さらなる態様では、動的言語値内のいくつかのビットを割り当てることは、Java(登録商標)、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、および.NET言語からなるグループから選択された言語内のいくつかのビットを割り当てることを含むことができる。
【０００８】
本明細書に組み込まれ、本明細書の一部をなす添付の図面は、本発明の例示的な態様を示し、上記の全般的な説明および下記の発明を実施するための形態とともに、本発明の特徴を説明するのに役立つ。
【図面の簡単な説明】
【０００９】
【図１】複数のドメインからのスクリプトを埋め込むクライアントアプリケーションを有する例示的なコンピューティングネットワーク内の論理フローを示すコンポーネントブロック図である。
【図２】暗示的な情報の流れを使用してセキュアな変数を漏出させるために使用することができる例示的なスクリプトの説明図である。
【図３】情報の流れを追跡し、悪意のあるスクリプトがリモートサーバと通信することを防止するための一態様方法のプロセスフロー図である。
【図４Ａ】クロススクリプト動作から得られる情報を通信するように試みるスクリプトを識別できるように、動的な値を記憶するためのタグを示すメッセージ構造図である。
【図４Ｂ】クロススクリプト動作から得られる情報を通信するように試みるスクリプトを識別できるように、動的な値を記憶するためのタグを示すメッセージ構造図である。
【図５】ランタイムエンジン内でラベルを伝搬するための一態様方法のプロセスフロー図である。
【図６】一態様によりラベルを伝搬する間、論理コンポーネントによって記憶される値を示すデータ構造図である。
【図７】効率的に標示されたマルチレベル値を使用して、サーバまたはサードパーティへの汚染データの漏洩をブロックするための一態様方法のプロセスフロー図である。
【図８】様々な態様とともに使用するのに適したコンピューティングデバイスのコンポーネントブロック図である。
【図９】様々な態様とともに使用するのに適した例示的なモバイルデバイスの図である。
【図１０】様々な態様とともに使用するのに適した例示的なパーソナルコンピュータの図である。
【発明を実施するための形態】
【００１０】
様々な態様が、添付の図面を参照して詳細に記載される。可能な場合はいつでも、同じ参照番号は、図面全体を通して同じまたは同様の部分を指すために使用される。特定の例および実装形態に行われる参照は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
【００１１】
「コンピューティングデバイス」という用語は、総称的に、サーバ、パーソナルコンピュータ、モバイルデバイス、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、パームトップコンピュータ、携帯情報端末(PDA)、ワイヤレス電子メール受信機(たとえば、Blackberry(登録商標)デバイスおよびTreo(登録商標)デバイス)、マルチメディアインターネット対応携帯電話(たとえば、Blackberry Storm(登録商標))、グローバルポジショニングシステム(GPS)受信機、ワイヤレスゲームコントローラ、パーソナルコンピュータ、ならびに、プログラマブルプロセッサを含む同様のパーソナル電子デバイスのいずれか1つまたはすべてを指すように、本明細書で使用される。様々な態様は、限られた処理電力しか有していない携帯電話などのモバイルデバイスにおいて特に有用であるが、態様は、全体的に、動的言語および/またはスクリプト言語で書かれたスクリプトおよびアプリケーションを実行する任意のコンピューティングデバイスにおいて有用である。
【００１２】
「マッシュアップ」という用語は、2つ以上のソースからのデータ、コンテンツ、コード、特徴、サービス、および/または機能(総称して「コンテンツ」)を組み合わせて、新しいサービス/アプリケーションを作成するクライアントアプリケーションまたはウェブページを指すように、本明細書で使用される。コンテンツは、統合型および可干渉性の方式で組み合わせることができるか、または分散および解体することができる。マッシュアップは、サーバベースまたはクライアントベースであり得る。サーバ側のマッシュアップは、一般に、クライアントアプリケーション(たとえば、ブラウザ)と1つまたは複数のホストウェブサイトとの間のプロキシとして働くサーバ上でコンテンツを統合する。クライアント側のマッシュアップは、クライアントアプリケーション上で直接コンテンツを統合する。マッシュアップはまた、サービスとして提供されるソフトウェア(SaaS)またはサービス指向アーキテクチャ(SOA)とともに使用することができる。
【００１３】
「動的言語」および「スクリプト言語」という用語は、本出願では総称的および互換的に使用され、ランタイムに解釈されるか、コンパイルされるか、または動的に変換されるプログラムを(本明細書では「スクリプト」として)書くために使用される任意の動的言語もしくはスクリプト言語、またはジャストインタイム(JIT)コンパイルをサポートする任意の言語を指す場合がある。これらの用語はまた、ランタイム仮想マシンを含む、および/または動的にコンパイルされる任意の言語を指す場合がある。本出願の範囲内の動的言語およびスクリプト言語の例には、たとえば、JavaScript(登録商標)、ActionScript(登録商標)、DART(登録商標)、PHP、Python(登録商標)、Ruby、PERL、Scala、Erlang、Candle、ならびに、Java(登録商標)、.NET言語、および今後開発される可能性がある他の言語が含まれる。
【００１４】
様々な態様は、様々な態様によって使用または対処することができる動的言語の都合のよい例として、JavaScript(登録商標)およびJavaScript関連用語を使用して本明細書に記載される。しかしながら、JavaScript(登録商標)を参照する例および本明細書内のJavaScript(登録商標)言語への他の参照は、例示目的のためにすぎず、説明または特許請求の範囲をその特定のタイプの動的言語に限定するものではないことを理解されたい。したがって、特許請求の範囲の範囲は、請求項で明記されない限り、JavaScript(登録商標)を列挙または要求するものとして解釈されるべきではない。
【００１５】
多くの動的言語により、クライアントアプリケーションが多くの異なるウェブサイトから発信するコンテンツおよびコード(ライブラリ、広告など)から形成されることが可能になり、ソフトウェア開発において、多くの異なるサードパーティスクリプトを単一のウェブサイトに埋め込むことが増える傾向にある。これらの動的言語により、埋込み型サードパーティコードが実行時に複数のソースからダウンロードされることが可能になる。埋込み型スクリプトは、ホスティングウェブページ上の機密情報(たとえば、クッキー、ロケーションバー、企業の顧客アカウントなど)にアクセスすることができ、大部分のブラウザにより、これらのスクリプトが埋込みページからの変数および情報に動的にアクセスおよび修正することが可能になる。悪意のあるコードは、これらおよび他の脆弱性を利用してユーザから機密情報を収集し、そのような情報を攻撃者が制御するサーバに送るように試みることができ、サーバはその情報を使用してユーザに対する不正を恒久化する可能性がある。悪意のあるコードはまた、ユーザの同意または認識なしに、ユニバーサルリソースロケータ(URL)ストリング変数に記憶された値にアクセス/修正して、そのページを悪意のあるサイトにリダイレクトすることができる。ウェブベースのセキュリティを提供する既存の方法は、これらのタイプの攻撃に対処する能力がなく、煩雑すぎて、モバイルコンピューティングデバイスなどの制約付きコンピューティング環境で実施できない。
【００１６】
上述された脆弱性に加えて、多くの動的言語により、攻撃者がドキュメントオブジェクトモデル(DOM)オブジェクトを追加および/または修正して、インジェクション攻撃を開始するために他の言語の特徴(たとえば、マウスオーバ効果)と一緒に使用できる様々な種類のネットワーク要求(たとえば、画像に対するAJAX要求および/またはGET要求)を送ることが可能になる。インジェクション攻撃により、ユーザエクスペリエンスに著しい影響を及ぼさず、かつ実行時の動きにおけるいかなる観測可能な違いもなしに、悪意のあるアクションを実行するコードを攻撃者が注入することが可能になり、ユーザは概して自分のデータが漏出したことに気付かない。その上、多くの動的言語は、それらを従来の静的解析技法に対して耐性があるようにする柔軟なタイピングシステムをサポートする。また、クライアントアプリケーション(たとえば、ウェブブラウザ)により、通常、スクリプトおよびライブラリが共有されたコンテキストおよびメモリ空間内に動的にロードされ実行されることが可能になる。これらの特徴により、悪意のある著者と優しい著者の両方が、攻撃を開始するために使用できるクライアントコンピューティングデバイスで実行するためのスクリプトを配信することが可能になる。悪意のあるコードを識別し、そのような攻撃を防止するための既存の方法は、一般に、情報セキュリティの完全確認および/または複雑なラベリング方式を必要とし、非効率的で、複雑で、費用がかかりすぎて、制約付きコンピューティング環境(たとえば、モバイルコンピューティングデバイスなど)で実施できない。
【００１７】
上述されたシナリオについてセキュリティ侵害を防止するための既存の解決策は、一般に、2つの普及しているセキュリティモデルである、サンドボックスモデルおよび同一生成元ポリシー(SOP)モデルのうちの1つを実装することを含む。サンドボックスモデルにより、複数のコンテンツソースが互いに相互作用することを防止することによって、悪意のあるコードが引き起こす可能性がある損害の量をクライアントアプリケーションが制限することが可能になる。サンドボックスモデルを実装するシステムは、特定のクライアント(たとえば、ブラウザタブ、ブラウザなど)内部のデータが他のクライアントまたはローカルシステムに通信されることが防止されるように、相互作用を制限することができる。たとえば、ウェブページを訪問するとき、サンドボックスモデルを実装するクライアントは、ホストコンピューティングデバイス上の無認可のソケットおよび/もしくはファイルのアクセス、ならびに/または無認可のウェブサイトとの通信を防止することができる。別の例として、サンドボックスモデルを実装するクライアントは、埋込み型スクリプトがウェブ関連のアクションのみを実行し、汎用のプログラミング作業(たとえば、ファイルの作成および読込みなど)を実行しないことを要求することができる。
【００１８】
同一生成元ポリシー(SOP)モデルを実装するクライアントは、一般に、同じソースを起源としない情報への埋込み型スクリプトのアクセスを制約することができる。たとえば、同一生成元ポリシーは、同じ起源を有するスクリプトが互いの方法およびオブジェクトにアクセスすることを許可することができるが、異なる起源を有するスクリプトが互いの方法およびオブジェクトにアクセスすることを防止する。このようにして、同一生成元ポリシー(SOP)を実装するクライアントは、悪意のあるスクリプトが異なるドメインに関係する情報の秘匿性および保全性を破ることを防止することができる。
【００１９】
これらのモデルはセキュリティにおいていくつかの改善を提供するが、現行の実装形態は、全体的に、限定的で、非効果的で、非効率的で、かつ/または費用がかかりすぎて、制約付きのコンピューティング環境で実施できない。その上、既存のセキュリティモデル(たとえば、サンドボックス、SOPなど)は、一般に、インタースクリプト通信およびクロススクリプト通信を制限し、上記で説明された新しくかつ新興の技術およびプログラミング技法(たとえば、マッシュアップ、リモートAPIなど)のためにユーザが必要とするセキュリティレベルと機能レベルのバランスをとる能力がない。たとえば、マッシュアップは、共有オブジェクトを生成する異なるドメインからの協働するスクリプトをしばしば含んでいるので、既存のセキュリティ解決策の実施を複雑にする。これらの共有オブジェクトの生成をサポートするために、ウェブページは、同一生成元ポリシー(SOP)を使用して異なるドメインからのコード/スクリプトを分離することができない。攻撃者がそのようなウェブページにコードを注入するように管理する場合、すべてのページが危険にさらされる可能性がある。
【００２０】
様々な態様は、ホストサーバへの返信を許可される情報のタイプを限定しながら、クライアント内でクロススクリプト通信を可能にすることによって、現在のセキュリティ方法のこれらおよび他の制限を克服する。上記で説明された他のウェブベースのシステムとの強い統合を可能にする普及している言語の特徴をサポートするために、悪意のあるコードが、ローカルで(たとえば、クライアント上で)動作を実行することを許可される可能性がある。検出および防止のメカニズムは、悪意のあるコードを識別し、それがネットワークを介して要求または任意の収集された情報を送ることを阻止することができ、それにより攻撃を同化し、動的言語コードを埋め込むアプリケーションのセキュリティを向上させる。
【００２１】
様々な態様は、コンパイル中に静的解析を実行し、解析結果は、プログラムの実行中に値(たとえば、JavaScript値)に添付されたラベル(たとえば、JavaScriptラベル)を更新、修正および伝搬する追加コードを生成し注入するために使用することができる。
【００２２】
様々な態様は、ソフトウェア仮想マシン内からの情報の流れを追跡する追跡システムを提供する。言語値(たとえば、JavaScript値)は、最初に、発信ドメインを識別するセキュリティラベルでタグ付けすることができる。言語値は、コード(たとえば、JavaScriptコード)の特定の部分が生成および/または読取りできる任意の値であり得る。言語ラベル(たとえば、JavaScriptラベル)は、言語値(たとえば、JavaScript値)を、コードの特定の部分の起源を識別するドメイン値(たとえば、www.google.com)と関連付けることができる。
【００２３】
一態様では、言語ラベルおよび言語値は、複数のレベルで符号化することができる。複数のレベルを使用すると、ラベルを2つ以上のモード(たとえば、高速モード、低速モードなど)に分割し、他のスクリプトから得られた情報を含む言語値の識別を大幅に簡略化することによって、情報の流れの追跡用の言語値内のラベルの符号化が可能になる。次いで、言語ラベルは、言語ラベルと整合しないサイトへの任意の情報の送信を防止するために使用することができ、それにより、単純な実装メカニズムを使用する無認可の情報の漏出を防止する。
【００２４】
図1は、機密情報がユーザから悪意をもって収集され、ユーザの認識または同意なしに外部サーバに送られる、例示的なシステム内のコンポーネントと情報の流れ100を示す。上述されたように、クライアントアプリケーション(たとえば、ウェブブラウザ)は、複数のサイト/サーバからコード(たとえば、JavaScriptスクリプト)を集め、組み合わせることができる。図1の図示された例では、クライアント120は、第1のサーバ/サイト(たとえば、www.good.com)102と第2のサーバ/サイト(たとえば、www.attacker.com)112の両方からコードを受信する。ブロック104で、第1のサーバ(たとえば、www.good.com)から発信するコードは、機密情報(たとえば、パスワード、電子メールアドレスなど)を含む変数(たとえば、pin)を作成することができる。上述されたように、動的言語(たとえば、JavaScript(登録商標))により、複数のスクリプトが同じ実行コンテキスト内で実行することが可能になり、各コード単位は他のコード単位の変数および機能を修正することができる。したがって、ブロック106で、第2のサーバ(たとえば、www.attacker.com)からのコードは、第1のサーバによって作成された変数(たとえば、pin)を読むことができる。ブロック108で、第2のサーバ(たとえば、www.attacker.com)からのコードは、DOMツリーにノードを追加し、画像(たとえば、someimage.jpg)を要求し、ブロック110で、クライアント120に、漏出した情報(たとえば、pinの値)をペイロードとして第2のサーバに送らせることができる。
【００２５】
無認可の情報収集は、明示的または暗示的に発生する場合がある。明示的な情報の流れの収集は、割当てステートメントなどの中の、1つの変数の値が別の変数の値に明示的に依存するときに発生する。暗示的な情報の流れの収集は、取られていない制御経路の知識を使用して、攻撃者がプログラムを構成してデータを横領するときに発生する。
【００２６】
図2は、暗示的な情報の流れの攻撃を使用してセキュアな変数を漏出させるために使用することができる、例示的なJavaScriptスクリプト202、204を示す。暗示的な情報の流れの攻撃では、攻撃者は、秘密値に対する制御フロー分岐を含んでいるコード202、204を注入し、結果として実行される副作用(またはそれらの欠如)を観察することによって、システム内の秘密変数の値を論理的に推論することができる。この手法が機能するために、攻撃者は、コードが注入されるシステムのいくらか詳細な知識を有していなければならず、ソースコードは通常ユーザに直接出荷されるので、このことは大部分のウェブベースのシステムに対して容易に満足される。通常のセキュリティ設計は、実行されている異なるスクリプト間の通信を安全にすることによって、そのような攻撃を防止するように試み、したがってクロスサイトスクリプトをそれが発生する前に阻止するように試みる。
【００２７】
様々な態様は、悪意のあるJavaScriptを実行し、クロスサイトスクリプトを可能にすることによって、通常のセキュリティ設計から逸脱するが、収集された情報が通信されることを防止する。詳細には、攻撃の検出および防止は、悪意のあるコードが収集された情報をネットワークを介して送るように実際に試みるときまで遅延することができ、そのとき、検出および防止のメカニズムは、要求が悪意のあるコードによって通信される(漏出する)ことを防止する。
【００２８】
図3は、情報の流れを追跡し、悪意のあるコードがリモートサーバと通信されることを防止するための一態様方法300を示す。ブロック302で、実行前に、言語値(たとえば、JavaScript値)は、最初に、発信ドメインを識別するセキュリティラベルでタグ付けすることができる。上記で説明されたように、言語値は、動的言語コードの特定の部分が生成および/または読取りできる任意の値であり得るし、言語ラベル(たとえば、JavaScriptラベル)は、言語値(たとえば、JavaScript値)を、コードの特定の部分の起源を識別するドメイン値(たとえば、www.google.com)と関連付ける。
【００２９】
一態様では、言語ラベルおよび言語値は、複数のレベルで符号化することができる。複数のレベルを使用すると、たとえば、ラベルを2つ以上のモード(たとえば、高速モードと低速モード)に分割し、他のスクリプトから得られた情報を含むことができる言語値の識別を大幅に簡略化することによって、情報の流れの追跡用の値内のラベルの符号化が可能になる。
【００３０】
図3に戻ると、ブロック304で、コンパイル時に静的解析を実行することができ、静的解析は、セキュリティ機密動作(たとえば、割当て)に対応する追加コードを生成/放出することができる。一態様では、生成/放出されたコードは、フローの分岐および合流を制御し、言語値(たとえば、JavaScript値)ごとにセキュリティタグを伝搬することができる。ブロック306〜310で、実行時に、仮想マシン(たとえば、JavaScript仮想マシン)は、生成/放出された追加コードを実行し、各値に適用されているラベルを管理し、プログラム内の情報の流れを追跡することができる。ブロック312で、検出および防止のメカニズム/プロセスは、動作を実行して、通信しているスクリプトと同じドメインから発信する他のスクリプトから得られた情報を通信する試みを検出することができる。ブロック314で、検出および防止のメカニズム/プロセスは、要求がネットワークを介して送られることを防止することができる。一態様では、攻撃の検出および防止は、悪意のあるスクリプトが収集された情報をネットワークを介して送るように試みるまで遅延することができる。
【００３１】
図4A〜図4Bは、クロススクリプト動作から得られる情報を通信するように試みるスクリプトが容易に識別されるように、言語値を記憶するための一態様のラベリングメカニズム/プロセス400、450を示す。理解しやすいように、以下の説明は、例示的な動的言語としてJavaScript(登録商標)を使用する。しかしながら、多種多様な動的言語が本出願の範囲内であり、特許請求の範囲の範囲は、請求項でそのように明記されない限り、JavaScript(登録商標)に限定されるべきではないことを理解されたい。
【００３２】
一般に、各言語値はmビットの値(たとえば、192ビットの値)として記憶することができ、JavaScriptエンジンでは、それをDynamic Valueまたは略してDValueと呼ぶ。図4A〜図4Bの図示された例では、192ビットのDValueは24バイトとして表現される。JavaScript値は、最下位のnビット(たとえば、バイト0〜1)がタイプ値(ストリング、ダブルなど)を記憶し、次のxビット(たとえば、バイト2〜3、バイト2〜5)が、JavaScript値用の発信ドメインラベル情報を効率的に符号化するラベル情報を記憶するように、記憶することができる。このようにして、x(たとえば、32、64)個の異なるドメインは、各JavaScript値内で符号化することができ、最小の実行時オーバーヘッドを必要とするだけのラベル合流用の論理「OR」演算の使用を可能にする。
【００３３】
上述されたように、一態様では、xビットのうちのいくつかが発信ドメインラベル情報を符号化するように、かつxビットのうちのいくつかがラベル情報を含んでいるロケーションへのポインタを記憶するように、ラベルおよび値は、複数のレベルで符号化することができる。一態様では、発信ドメインラベル情報を符号化するために使用されるxビットの数は、スクリプトの数に基づいて調整することができる。一態様では、発信ドメインラベル情報を符号化するために使用されるxビットの数は、前の実行から得られた情報、ユーザのブラウズ履歴、または実行時に収集されたメトリクスに基づいて調整することができる。
【００３４】
図4A〜図4Bに戻ると、方法400および450では、JavaScript値は、DValue構造のyビット(たとえば、バイト4〜11、バイト6〜13)が実際の値を記憶し、zビット(たとえば、バイト12〜15、バイト14〜15)が整列情報を記憶し、上位ビット(たとえば、バイト16〜23)がオブジェクトポインタを記憶するように、記憶することができる。
【００３５】
図5は、一態様により、インタープリタ(たとえば、JavaScriptエンジン)内でラベルを伝搬するための例示的な方法500を示す。ブロック502で、実行前に、コードの埋め込まれた単位(たとえば、JavaScriptスクリプト)は、その起源のドメイン(たとえば、www.good.com)をドメインレジスタに登録することができる。ブロック504で、値(たとえば、12)は、実行されたプログラムのすべてにわたって共有実行コンテキスト内の第1の変数に割り当てることができる。ブロック506で、第1の変数用の内部表現を作成することができる。ブロック508で、内部表現は、たとえば、上位4ビットに値(たとえば、12)のバイナリ表現(1100)を記憶することによって、第1の変数に割り当てられた値(たとえば、12)を含むように、更新することができる。ブロック510で、ドメイン(たとえば、www.good.com)に関連付けられたラベル(0000-0001)はまた、第1の変数に添付することができる。ブロック512で、異なる起源のドメイン(たとえば、www.attacker .com)を有する第2の変数について、ブロック502〜510の動作を実行することができる。ブロック514で、値を2つ以上のドメインに関連付けられていると識別するラベルタグの値は、論理「OR」演算を使用して計算することができる。
【００３６】
図6は、態様方法500に従ってインタープリタ(たとえば、JavaScriptエンジン)内でラベルを伝搬する間のドメインレジスタ、実行コンテキスト、および言語値の内部表現の値を示す図である。実行前に、コードの各単位(たとえば、JavaScriptスクリプト)は、その起源のドメイン(たとえば、www.good.com、www.attacker .com)をドメインレジスタ602に登録することができ、内部表現604は、たとえば、例示的な変数a、b、およびcについて作成することができる。値(たとえば、12)は、すべての実行されたプログラムにわたって共有できる共有実行コンテキスト604内の変数「a」に割り当てることができる。次いで、内部表現は、上位4ビットに値(たとえば、12)のバイナリ表現(1100)を記憶することによって、更新されて変数「a」に割り当てられた値(たとえば、12)を含むことができる。ドメイン(たとえば、www.good.com)に関連付けられたラベル(0000-0001)はまた、変数「a」に添付することができる。下位8ビット(0000-0101)は、割り当てられた値のタイプ(たとえば、整数、ダブルなど)を規定することができる。
【００３７】
図6の図示された例では、変数「b」用の内部表現は、変数「a」と同じ図式に従う。しかしながら、変数「c」は、ドメインwww.good.comとwww.attacker .comのラベルに関連付けられている値を識別するラベルタグの値(0000-0011)を含む。一態様では、この情報は、情報を送るネットワーク要求を許可すべきかどうかを決定するために使用することができる。
【００３８】
一態様では、値を2つ以上のドメインに関連付けられていると識別するラベルタグの値は、論理OR演算を使用して計算することができる。ネットワークを介してあらゆる要求が送られる前に、様々な態様は、情報がそのドメインに送られることが許可されるかどうか、またはセキュリティ侵害が発生したかどうかをチェックすることができる。その値のラベルは比較することができ、その比較の結果は、送信要求が許可されるかどうかを決定するために使用することができる。
【００３９】
様々な態様は、クライアントアプリケーションが情報を漏洩することを防止する。伝搬ラベルは、あらゆる値がすべての可能なラベルで貼られるラベルクリープ(ラベル急増)につながる可能性がある。一態様では、ラベルクリープが発生せず、かつ/または性能に影響しないように、JavaScript(登録商標)が実行される。一態様では、タイミングチャネルに基づいた情報漏洩は無視することができる。
【００４０】
図7は、効率的に標示されたマルチレベル値を使用して、サーバまたはサードパーティへの汚染データの漏洩をブロックするための一態様方法700を示す。図4A〜図4Bを参照して上記で説明されたように、xビット(たとえば、バイト2〜3、バイト2〜5)は、言語値用の発信ドメインラベル情報を効率的に符号化するラベル情報を記憶することができる。同じく上記で説明されたように、様々な態様では、ラベルおよび値は複数のレベルで符号化することができる。複数のレベルを使用すると、ラベルを2つ以上のモード(たとえば、高速モード、低速モードなど)に分割し、他のスクリプトから得られた情報を含む言語値の識別を大幅に簡略化することによって、情報の流れの追跡用のJavaScript値内のラベルの符号化が可能になる。
【００４１】
図7を参照すると、ブロック702で、言語ラベルは、値自体の中の1ホットビットとしてすべてのラベルを符号化する高速モード、および別のメモリロケーションに記憶された値への参照としてラベルを符号化する低速モードの2つのモードで、言語値内で符号化することができる。ブロック704で、第1のモード(たとえば、「高速モード」)が使用されるべきか、または第2のモード(たとえば、「低速モード」)が使用されるべきかを示すために1ビットを確保することができる。たとえば、16ビット(たとえば、バイト2〜3)がラベル情報を記憶するために確保された構成(たとえば、図4A)では、第1のモード(たとえば、「高速モード」)が使用されるべきか、または第2のモード(たとえば、「低速モード」)が使用されるべきかを示すために第16ビットを確保することができる。判定ブロック706では、高速モードが選択されたことを確保されたビットが示すかどうかが判定される。高速モードが選択されたと判定された場合(すなわち、判定ブロック706=「Yes」)、ブロック708で、残りのビットは値自体の中で符号化されていると識別され、識別動作は、簡単なビット単位のOR演算を使用して実行することができる。低速モードが選択されたと判定された場合(すなわち、判定ブロック706=「No」)、ブロック710で、残りのビットは、ラベルを管理するための一般的な技法を使用して符号化されると識別することできる。たとえば、16ビット(たとえば、バイト2〜3)がラベル情報を記憶するために確保された構成(たとえば、図4A)では、第16のスクリプトが別のスクリプトからの値にアクセスするとき、ラベル値を記憶するスペースはもはや存在せず(すなわち、DValueがラベル情報用に確保されたビットを使い果たし)、実際のラベル情報を記憶するラベルマネージャデータ構造内へのキーとして使用できるインデックスを記憶するために、ラベル値は低速モードで符号化されねばならない。
【００４２】
一態様では、ラベルマネージャは、ラベルがより多くのラベル情報を記憶するために必要なだけ大きい可能性があるアレイへのインデックスであるように、構成することができる。このようにして、多数のスクリプトをサポートすることができるが、同時に、速度は、低速モードで記憶されるべき値用の十分大きな数のクロス通信スクリプト(たとえば、上記の例では15スクリプト以下)を含んでいないJavaScript値ごとに大幅に改善され、識別動作が簡単なビット単位のOR演算を使用して実行されることが可能になる。
【００４３】
様々な態様は、従来のセキュリティ解決策から逸脱し、一般に、クロスサイトスクリプトを阻止するように実行されている異なるスクリプト間のセキュア通信に焦点を当てる。様々な態様により、悪意のあるJavaScript(登録商標)がローカルで実行されることが可能になるが、悪意のあるコードがホストサイトに情報を送ることは防止される。様々な態様はまた、JavaScriptのラベルおよび値を複数のレベルで符号化することで、既存の情報の流れの追跡方法から逸脱するが、JavaScriptラベルをJavaScript値自体の中の1ホットビットとして符号化することが可能になる。このことにより、複雑さが大幅に低減され、効率が大幅に改善され、様々な態様が、すべてユーザエクスペリエンスに影響を及ぼさずに、制約付きのコンピューティング環境に実装されることが可能になる。様々な態様は、動作の複雑さ、記憶容量、およびオーバーヘッド関連のアクセス時間のバランスをとって、性能全体を大幅に向上させる。
【００４４】
本態様は、多機能携帯電話などのモバイルコンピューティングデバイス、およびパーソナルコンピュータなどの様々なコンピューティングデバイスのいずれかに実装することができる。本態様は、性能節約から恩恵を受けることができる、比較的制限された処理能力および/またはリソースを有するコンピューティングデバイスで特に役立つ。
【００４５】
そのようなコンピューティングデバイス800の例示的で非限定的な態様の例示的なコンポーネントおよびモジュールが図8に示される。コンピューティングデバイス800は電子部品の回路基板880を含む場合があり、電子部品の一部またはすべては、メモリ802に結合された制御プロセッサ801を含むオンチップシステムに統合することができる。制御プロセッサ801はさらに、デジタル信号プロセッサ811および/またはアナログ信号プロセッサ821に結合される場合があり、これらも一緒に結合することができる。いくつかの態様では、制御プロセッサ801およびデジタル信号プロセッサ811は、同じコンポーネントである場合があるか、または、同じプロセッサチップに統合することができる。ディスプレイコントローラ833およびタッチスクリーンコントローラ843は、制御プロセッサ801、およびコンピューティングデバイス800内またはそれに接続されるディスプレイまたはタッチスクリーンディスプレイ803に結合することができる。
【００４６】
制御プロセッサ801はまた、リムーバブルメモリ822(たとえば、モバイルコンピューティングデバイスの場合のSDメモリまたはSIMカード)、ならびに/または、ディスクドライブ、CDドライブ、およびDVDドライブのうちの1つまたは複数などの外部メモリ804に結合することができる。制御プロセッサ801はまた、USBポート814に結合するユニバーサルシリアルバス(USB)コントローラ812に結合することができる。また、電源870は、USBコントローラ812を通して、または様々な電子部品に電力(たとえば、DC電力)を供給する様々な電気接続を通して、回路基板880に結合することができる。
【００４７】
制御プロセッサ801はまた、ビデオエンコーダ834、たとえば、位相反転線(PAL)エンコーダ、順次式カラーメモリ(SECAM)エンコーダ、または全国テレビジョン方式委員会(NTSC)エンコーダに結合することができる。さらに、ビデオエンコーダ834は、ビデオエンコーダ834およびディスプレイまたはタッチスクリーンディスプレイ803に結合できるビデオ増幅器836に結合することができる。また、ビデオポート838は、ビデオ増幅器836に結合されて、コンピューティングデバイス800を外部のモニタ、テレビまたは他のディスプレイ(図示せず)に接続することを可能にすることができる。
【００４８】
いくつかの態様、特にモバイルコンピューティングデバイスでは、制御プロセッサ801は、アナログ信号プロセッサ821などを介して、無線周波(RF)送受信機805に結合することができる。RF送受信機805は、RF信号を送信および受信するために、RFアンテナ804に結合することができる。RF送受信機805は、たとえば、携帯電話(たとえば、G-3、UMTS、CDMAなど)、WiFi、WiMax、およびBluetooth(登録商標)を含む、1つまたは複数の異なるワイヤレス通信プロトコルの通信信号を送信および受信するように構成することができる。
【００４９】
制御プロセッサ801はさらに、ネットワークカード806に結合することができ、ネットワークカード806は、ネットワークコネクタ816および/またはRF送受信機805に結合され、外部ネットワーク(たとえば、ローカルエリアネットワーク、インターネット、イントラネット、WiFiネットワーク、Bluetooth(登録商標)をネットワーク、パーソナルエリアネットワーク(PAN)など)を介した通信を可能にするように構成することができる。ネットワークカード806は、個別のチップまたはカードの形態であり得るか、または、完全解通信チップとして、制御プロセッサ801またはRF送受信機805(または両方)の一部として実装される場合がある。
【００５０】
図8で示されたように、いくつかのアナログデバイスは、キーパッド808のように、アナログ信号プロセッサ821を介して制御プロセッサ801に結合することができる。他の実装形態では、キーパッドまたはキーボードはそれ自体のプロセッサを含む場合があり、その結果、制御プロセッサ801とのインターフェースは、直接接続(図示せず)を介するか、ネットワーク接続(たとえば、ネットワークカード)を介するか、またはUSBポート814を介する場合がある。
【００５１】
いくつかの実装形態では、デジタルカメラ848は制御プロセッサ801に結合することができる。例示的な態様では、デジタルカメラ848は、電荷結合デバイス(CCD)カメラまたは相補型金属酸化物半導体(CMOS)カメラであり得る。デジタルカメラ848は、コンピューティングデバイス800に組み込まれているか、または外部ケーブルによってデバイスに結合することができる。
【００５２】
いくつかの実装形態では、オーディオコーデック850(たとえば、ステレオコーデック)は、アナログ信号プロセッサ821に結合することができ、オーディオ増幅器852を介して1つまたは複数のスピーカ854に音声信号を送るように構成することができる。オーディオコーデック850はまた、(たとえば、マイクロフォンジャックを介して)マイクロフォン858に結合できるマイクロフォン増幅器856に結合することができる。ヘッドフォンジャック859はまた、オーディオをヘッドフォンに出力するために、オーディオコーデック850に結合することができる。
【００５３】
いくつかの実装形態では、コンピューティングデバイス800は、ブロードキャストされたワイヤレス通信信号を受信するためのアンテナ862に結合できる別のRF受信機回路860を含む場合がある。受信機回路860は、ブロードキャストされたテレビ信号を受信し、処理のためにDSP811に受信された信号を供給するように構成することができる。いくつかの実装形態では、受信機回路860は、FM無線信号を受信するように構成することができ、この場合、受信された信号は、処理のためにオーディオコーデック850に渡すことができる。
【００５４】
一態様では、上述された方法の動作のうちの1つまたは複数を遂行するためのプロセッサ実行可能命令は、内部メモリ802、リムーバブルメモリ822、および/または不揮発性メモリ804(たとえば、ハードドライブ、CDドライブ、またはネットワークを介してアクセス可能な他のストレージ)に記憶することができる。そのようなプロセッサ実行可能命令は、本明細書に記載された方法を実施するために、制御プロセッサ801によって実行することができる。
【００５５】
モバイルコンピューティングデバイスの例が図9に示され、ノートブックコンピュータの例が図10に示される。典型的なモバイルコンピューティングデバイス900は、図9に示されたコンポーネントを共通に有する。たとえば、モバイルコンピューティングデバイス900は、内部メモリ902に結合されたプロセッサ901およびタッチ面入力デバイス/ディスプレイ903を含む場合がある。タッチスクリーンディスプレイ903は、抵抗検知タッチスクリーン、容量検知タッチスクリーン、赤外線検知タッチスクリーン、音響/圧電検知タッチスクリーンなどである。様々な態様は、いかなる特定のタイプのタッチスクリーンディスプレイ903またはタッチパッド技術にも限定されない。加えて、コンピューティングデバイス900は、プロセッサ901に結合されたワイヤレスデータリンクおよび/または携帯電話送受信機905に接続された、電磁放射を送信および受信するためのアンテナ904を有する場合がある。コンピューティングデバイス900はまた、ユーザ入力を受け取るための物理ボタン908を含む場合がある。
【００５６】
様々な態様は、モバイルコンピューティングデバイスに著しい性能向上をもたらすことができるが、パーソナルコンピュータおよびラップトップコンピュータを含む他の形態のコンピューティングデバイスも、動的言語スクリプトの事前構文解析から恩恵を受けることができる。そのようなコンピューティングデバイスは、通常、例示的なパーソナルラップトップコンピュータ1000を示す図10に示されたコンポーネントを含む。そのようなパーソナルコンピュータ1000は、一般に、揮発性メモリ1002、およびディスクドライブ1003などの大容量不揮発性メモリに結合されたプロセッサ1001を含む。コンピュータ1000はまた、プロセッサ1001に結合されたコンパクトディスク(CD)および/またはDVDドライブ1004を含む場合がある。コンピュータデバイス1000はまた、プロセッサ1001をネットワークに結合するためのネットワーク接続回路1005などの、データ接続を確立し外部メモリデバイスを受け入れるための、プロセッサ1001に結合されたいくつかのコネクタポートを含む場合がある。コンピュータ業界ではよく知られているように、コンピュータ1000はさらに、キーボード1008、マウスなどのポインティングデバイス1010、およびディスプレイ1009に結合することができる。
【００５７】
プロセッサ901、1001は、本明細書に記載された様々な態様の機能を含む、様々な機能を実行するようにソフトウェア命令(アプリケーション)によって構成できる、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであり得る。いくつかのモバイルデバイスでは、1つのプロセッサをワイヤレス通信機能専用にし、1つのプロセッサを他のアプリケーションの実行専用にするなど、多重プロセッサ901、1001を提供することができる。通常、ソフトウェアアプリケーションは、それらがアクセスされ、プロセッサ901、1001にロードされる前に、内部メモリ902、1002に記憶することができる。いくつかのモバイルデバイスでは、プロセッサ901、1001は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含むことができる。いくつかのモバイルデバイスでは、セキュアなメモリが、プロセッサ901、1001に結合された別のメモリチップ内にある場合がある。内部メモリ902、1002は、揮発性メモリ、またはフラッシュメモリなどの不揮発性メモリ、または両方の混合であり得る。本明細書においては、メモリへの一般的な言及は、内部メモリ902、1002、モバイルデバイスにつながれたリムーバブルメモリ、プロセッサ901、1001自体の内部のメモリを含む、プロセッサ901、1001によってアクセス可能なすべてのメモリを指す。
【００５８】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様のブロックが提示された順序で実施されなければならないことを要求または暗示するものではない。当業者によって諒解されるように、上記の態様におけるステップの順序は、いかなる順序でも実行することができる。「その後」、「次いで」、「次に」などの単語は、ブロックの順序を限定するものではなく、これらの単語は、方法の説明を通して読者を案内するために使用されるにすぎない。さらに、たとえば、冠詞「a」、「an」または「the」の使用による単数形での請求要素へのいかなる言及も、その要素を単数に限定するものとして解釈されるべきではない。
【００５９】
本明細書で開示された態様に関して記載された、様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装することができる。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップが、上記では概してそれらの機能に関して記載された。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、記載された機能を特定の適用例ごとに様々な方法で実装できるが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈されるべきではない。
【００６０】
本明細書で開示された態様に関して記載された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェアコンポーネント、または、本明細書に記載された機能を実行するように設計されたそれらの任意の組合せで、実装または実行することができる。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装することができる。代替として、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行することができる。
【００６１】
1つまたは複数の例示的な態様では、記載された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せに実装することができる。ソフトウェアに実装される場合、機能は、1つもしくは複数の命令もしくはコードとして、非一時的コンピュータ可読媒体もしくはプロセッサ可読記憶媒体上に記憶されるか、または非一時的コンピュータ可読媒体もしくはプロセッサ可読記憶媒体を介して送信することができる。本明細書で開示された方法またはアルゴリズムのステップは、非一時的プロセッサ可読またはコンピュータ可読の記憶媒体上に常駐できるプロセッサ実行可能ソフトウェアモジュール内で具現化することができる。非一時的プロセッサ可読およびコンピュータ可読の媒体は、コンピュータまたはコンピューティングデバイスのプロセッサによってアクセスできる任意の使用可能な記憶媒体であり得る。限定ではなく例として、そのような非一時的プロセッサ可読またはコンピュータ可読の媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形態で所望のプログラムコードを搬送もしくは記憶するために使用でき、コンピュータもしくはコンピューティングデバイスのプロセッサによってアクセスできる任意の他の媒体を備えることができる。本明細書で使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フレキシブルディスク、およびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生し、ディスク(disc)は、レーザで光学的にデータを再生する。上記の組合せも非一時的コンピュータ可読媒体の範囲内に含まれるべきである。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込むことができる、非一時的プロセッサ可読媒体および/または非一時的コンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せまたはそのセットとして存在することができる。
【００６２】
開示された態様の上記の説明は、任意の当業者が本発明を製作または使用できるように提供される。これらの態様への様々な修正が当業者には容易に明らかであり、本明細書で定義された一般的な原理は、本発明の趣旨または範囲を逸脱することなく、他の態様に適用することができる。したがって、本発明は、本明細書で示された態様に限定されるものではなく、以下の特許請求の範囲ならびに本明細書で開示された原理および新規の特徴に合致する、最も広い範囲を与えられるべきである。
【符号の説明】
【００６３】
100  例示的なシステム内の構成要素と情報の流れ
102  第1のサーバ/サイト
104  機密情報を含む変数を作成する
106  第1のサーバによって作成された変数を読む
108  DOMツリーにノードを追加し、画像を要求する
110  クライアント120に、漏出した情報をペイロードとして第2のサーバに送らせる
112  第2のサーバ/サイト
120  クライアント
202  例示的なJavaScriptスクリプト
204  例示的なJavaScriptスクリプト
300  情報の流れを追跡し、悪意のあるコードがリモートサーバと通信されることを防止するための一態様方法
400  言語値を記憶するための一態様のラベリングメカニズム/プロセス
450  言語値を記憶するための一態様のラベリングメカニズム/プロセス
500  インタープリタ内でラベルを伝搬するための例示的な方法
602  ドメインレジスタ
604  共有実行コンテキスト
606  内部表現
700  サーバまたはサードパーティへの汚染データの漏洩をブロックするための一態様方法
800  コンピューティングデバイス
801  制御プロセッサ
802  内部メモリ
803  ディスプレイまたはタッチスクリーンディスプレイ
804  外部メモリ
804  RFアンテナ
805  無線周波(RF)送受信機
806  ネットワークカード
808  キーパッド
811  デジタル信号プロセッサ
812  ユニバーサルシリアルバス(USB)コントローラ
814  USBポート
816  ネットワークコネクタ
821  アナログ信号プロセッサ
822  リムーバブルメモリ
833  ディスプレイコントローラ
834  ビデオエンコーダ
836  ビデオ増幅器
838  ビデオポート
843  タッチスクリーンコントローラ
848  デジタルカメラ
850  オーディオコーデック
852  オーディオ増幅器
854  スピーカ
856  マイクロフォン増幅器
858  マイクロフォン
859  ヘッドフォンジャック
860  RF受信機回路
862  アンテナ
870  電源
880  回路基板
900  モバイルコンピューティングデバイス
901  プロセッサ
902  内部メモリ
903  タッチ面入力デバイス/ディスプレイ
904  アンテナ
905  ワイヤレスデータリンクおよび/または携帯電話送受信機
908  物理ボタン
1000  パーソナルラップトップコンピュータ
1001  プロセッサ
1002  揮発性メモリ
1003  ディスクドライブ
1004  コンパクトディスク(CD)および/またはDVDドライブ
1005  ネットワーク接続回路
1008  キーボード
1009  ディスプレイ
1010  ポインティングデバイス
【図１】
0005707542.tif 000002
【図２】
0005707542.tif 000003
【図３】
0005707542.tif 000004
【図４Ａ】
0005707542.tif 000005
【図４Ｂ】
0005707542.tif 000006
【図５】
0005707542.tif 000007
【図６】
0005707542.tif 000008
【図７】
0005707542.tif 000009
【図８】
0005707542.tif 000010
【図９】
0005707542.tif 000011
【図１０】
0005707542.tif 000012