説明

オブジェクトへの制御されたアクセスを有するソフトウェアシステム

【課題】オブジェクトに掛けられたメソッド呼び出しを傍受するように構成されたコンピュータシステム。
【解決手段】メソッド呼び出しを傍受することにより、処理をメソッド呼び出し毎に逐次的に遂行することが可能となる。この処理の一部として、オブジェクトに対するメタデータが調べられ、そのオブジェクトに対するメソッドがサブセットに分割される。任意の特定のメソッド呼び出しに応答して遂行される処理は、そのメソッドが属するサブセットに基づく。メタデータのタイプは、コンピュータシステムの所望の動作に依存する。ホワイトリストまたはブラックリストを表すメタデータをコンピュータシステム内で用い、これによって、安全と判断されるメソッドへのアクセスは許可し、安全でないと判断されるメソッドへのアクセスは拒絶するセキュリティゾーンを実現することができる。

【発明の詳細な説明】
【背景技術】
【0001】
多くのソフトウェアシステムにおいては、ある特定のオブジェクトへのアクセスは、それらオブジェクトが呼び出されるコンテキストに基づいて制限される。例えば、本件特許出願人により提供されるINTERNET EXPLORER(登録商標)なるウェブブラウザなどのようなウェブブラウザは、「セキュリティゾーン(security zone)」を実現するために、ある特定のオブジェクトへのアクセスを制限する。インターネットからダウンロードされたスクリプトは、このセキュリティゾーン内で実行することは許可されるが、しかし、これらスクリプトは、そのウェブブラウザがインストールされているコンピュータの動作を混乱させる恐れのあるオブジェクトへのアクセスは拒絶される。セキュリティゾーンを有することで、コンピュータユーザは、インターネットまたは他の信頼できないソースからのスクリプトをダウンロードすることを許されるが、同時に、このようなダウンロードされたスクリプトが、コンピュータ上で実行されたとき、それらが不注意で誤って書かれていたり、あるいは悪意にてコンピュータの動作を混乱させるような方法で書かれていたりして、コンピュータを損傷させる危険はあるが、それが低減される。
【0002】
ActiveX(登録商標)なるオブジェクトは、それに向けられたアクセスが制限されるオブジェクトの1例である。スクリプトを実行するように構成されたコンピュータは、複数のActiveX(登録商標)なるオブジェクトを含んでも良い。各ActiveX(登録商標)なるオブジェクトは、1つまたは複数のインタフェースを含む。各インタフェースは、そのインタフェースを通じて呼び出すことができるメソッド(method)を含み、インタフェースによりスクリプトは、そのスクリプトの実行中に機能を遂行するため、これらメソッドを呼び出すことができる。このような機能には、コンピュータのディスプレイ上への情報の提供、電子メールを送信する目的での電子メールシステムへのアクセス、またはコンピュータのファイル管理システム内のファイルの変更が含まれる。
【0003】
ActiveX(登録商標)なるオブジェクトにて遂行される幾つかの機能、例えば、コンピュータのディスプレイ上への出力の提供は通常は悪意によるものではない。このような悪意によらない機能を遂行するメソッドのみを公開するオブジェクトのセキュリティゾーンからの呼び出し(call)は許可される。しかし、他の機能、例えば、ファイル管理システムにアクセスする機能は、そのスクリプト内において誤って用いられ、あるいは悪意ある目的のため用いられるとコンピュータを損傷させることがある。セキュリティゾーンを実現する場合、このような有害な機能を遂行するメソッドを公開するオブジェクトへの呼び出しは許可されない。
【0004】
ある特定のオブジェクトへのアクセスを、セキュリティゾーンから発動された場合、制限するためのメカニズムが提供されている。ActiveX(登録商標)なるオブジェクトに対して、このメカニズムは、IObjectSafetyと呼ばれるオプションとしての条件付きのインタフェースである。このインタフェースを実現するActiveX「登録商標」なるオブジェクトは、スクリプトを実行するホストプログラムからのクエリに応答できる。このスクリプトはActiveX(登録商標)が「安全モード(safe mode)」の動作を有し、安全モードでインスタンス化することができることを示している。いったん、安全モードでインスタンス化されると、呼び出しをそのオブジェクトに向けて、その任意のインタフェースを通じて掛けることができる。このActiveX(登録商標)なるオブジェクトの責務は、安全モードにて実行しているときには、安全でないメソッドは呼び出されないことを保証することにある。この特徴により、ウェブブラウザが、セキュリティゾーンを、安全モードの動作をサポートするActiveX(登録商標)なるオブジェクトのインスタンスを生成すること、および全てのこのようなオブジェクトを安全モードでインスタンス化することでのみで実現が可能になる。
【発明の概要】
【0005】
コンピュータシステムに対するソフトウェアは、オブジェクトへのアクセスを制御するための改善されたプロセスを提供することで、よりパワフルにすることができ、より簡単に開発することができ、および、制限されることを意図するオブジェクトへのアクセスを与えてしまう可能性をより小さくできる。このプロセスは、このプロセスを遂行するために特別にオブジェクトを実装することは要求されず、このために、このプロセスの利用が簡単になり、現存するオブジェクトをこの改善されたプロセスに従うコンピュータシステムで用いることが可能になることが好ましい。
【0006】
1つの形態においては、本発明はメソッド呼び出し(method call)を傍受することができ、このため、それが実行される前または後にメソッド呼び出しを処理することが可能になるソフトウェアシステムに関する。呼び出しは、インタフェースコンポーネントを提供することで傍受されるが、このインタフェースコンポーネントは、メソッド呼び出しを受信し、各々の呼び出しを処理した後に、その呼び出しを許可または拒絶する。この技術は、このセキュリティゾーンから掛けられた各々の呼び出しを処理することで、セキュリティゾーンを実現するために使用することができ、呼び出されているメソッドが実行に対して安全であるとみなされるか否かを判断できる。結果として、オブジェクトへのアクセスをメソッド呼び出し毎に逐次的(method call−by−method call)にて制限することが可能になる。
【0007】
もう1つの形態においては、本発明は、コンピュータシステムを、メソッド呼び出しを選択的に処理するために動作させることに関する。このプロセスは、コンピュータシステムにプログラムされているメソッドに関する格納された情報を用いる。あるメソッドが呼び出されると、この格納されている情報が、その呼び出しの処理で用いるためにアクセスされる。このプロセスは、その格納されている情報がどのメソッド呼び出しが拒絶または許可されるべきかを示すときは、セキュリティゾーンの実現の一部として用いられる。このプロセスは、更に他のコンテキスト内において適用することもでき、これには、選択されたメソッドの実行をロギングするため、またはあるプログラムの実行のコストに関する統計量を累積するためのシステムの一部として用いることが含まれる。
【0008】
もう1つの形態においては、本発明は、特別な処理が要求されるゾーンから間接的にインスタンス化されたオブジェクトを識別するメカニズムを含むコンピュータ用ソフトウェアに関する。あるゾーンから間接的にインスタンス化されたオブジェクトを追跡するために、オブジェクトはそれと関連付けられたラッパーを有する。このラッパーは、そのオブジェクトが、そのゾーンから、直接的に、あるいは間接的に、インスタンス化されたか否かを示す情報を格納する。ラッパーは、オブジェクトが他のオブジェクトをインスタンス化するようなプロセス内で用いることができる。あるオブジェクトがもう1つのオブジェクトをインスタンス化するとき、各オブジェクトは先行するオブジェクトから値を継承するが、これはラッパー内に格納される。オブジェクトの連鎖が形成される場合、各オブジェクトはその連鎖内の最初のオブジェクトと同一の値を有する。その連鎖内のルートオブジェクトに、そのオブジェクトはそのゾーン内でインスタンス化されたことを示す値が与えられると、その連鎖内の個々のオブジェクトは、そのゾーンからインスタンス化されたそれらオブジェクトを識別して、同一の値を有することになる。これら格納された指標を、オブジェクトへのアクセスを制限するプロセスの一部として使用することで、セキュリティゾーンを実現するコード開発者に掛かる負担が、コード開発者は、間接的にインスタンス化された可能性のあるオブジェクトを識別する必要がないため、または、セキュリティゾーン内での実行に対して安全ではないと判断されるオブジェクトへのアクセスを制限する必要性はなくなるために軽減される。
【0009】
上記説明は本発明の非制限的な要約であり、本発明は添付の請求項にて定義される。
【0010】
添付図面は縮尺にて描かれることは意図されてない。図面において、さまざまな図内に示されている各々の同一もしくはほぼ同一のコンポーネントは類似する数字にて表されている。簡素化の目的で、全てのコンポーネントが全ての図面において参照数字を与えられてはいない。
【図面の簡単な説明】
【0011】
【図1】従来技術によるコンピュータシステムの概略図である。
【図2】本発明の一実施形態に従うコンピュータシステムの動作を示す流れ図である。
【図3】本発明の一実施形態を組み込むコンピュータシステムのソフトウェアブロック図である。
【図4】本発明の一実施形態を組み込むコンピュータシステムの別の動作状態におけるソフトウェアブロック図である。
【発明を実施するための形態】
【0012】
我々はセキュリティゾーンの実現は、オブジェクトへのアクセスを制御するプロセスが改善された場合、改善されるであろうということを認識した。オブジェクトが安全なインタフェースを実現する場合、オブジェクトをセキュリティゾーン内からのみインスタンス化することが知られているが、この予防措置さえも、そのセキュリティゾーンで実行しているスクリプトに、そのセキュリティゾーン内からインスタンス化されていないオブジェクトへアクセスが与えられた場合は十分ではない。この状態はあるオブジェクトがもう1つのオブジェクトを送り返すような場合に発生する。例えば、安全なインタフェースを実現する第1のオブジェクトは、そのオブジェクトメソッドの1つが呼び出されると、第2のオブジェクトをインスタンス化し、この第2のオブジェクトをそのスクリプトに送り返す。その第2のオブジェクトが「安全(safe)」ではないと見なされる場合は、そのスクリプトは安全でないオブジェクトへのアクセスを間接的に得ることとなる。
【0013】
この結果を回避するためには、各々のメソッドの安全性がメソッド呼び出し毎に逐次的(method call−by−method call)にて検証される。ある呼び出しがなされると、その呼び出しは呼び出されているメソッドが安全であると判断された場合に限り続行を許される。以下により詳細に説明されるように、本発明の実施形態においては、このようなセキュリティゾーンは、メソッド呼び出しを傍受することで実現される。あるメソッド呼び出しがセキュリティゾーン内からなされた場合、その呼び出されたメソッドは、そのメソッドが安全であると判断されると続行を許されるが、そのメソッドが安全ではないと判断されたとアクセスはブロックされる。
【0014】
更に、セキュリティゾーンで実行しているスクリプトから間接的にインスタンス化されたオブジェクトを識別するためのメカニズムが提供される。幾つかの実施例においては、このメカニズムは、オブジェクトに、それらがインスタンス化される際に、ある特性を割り当てることを含む。個々のオブジェクトがインスタンス化されるとき、これは、この特性を、それをインスタンス化したオブジェクトから継承することができる。セキュリティゾーンで直接的にインスタンス化されたオブジェクトに、この特性の認識可能な値を与えることで、結果として、そのセキュリティゾーンにおいて間接的にインスタンス化された任意のオブジェクトがこの値を継承することとなる。このようなメカニズムの具体的な例として、セキュリティゾーンで間接的にインスタント化されたオブジェクトに対してラッパーが提供される。このラッパーは、そのオブジェクトに対する特性を定義する情報を格納し、ここではそのオブジェクト定義に対するいかなる変更も要求されない。
【0015】
図1にはコンピュータシステム110のブロック図が示されている。図1のブロック図は、大幅に簡略化されており、本発明の例示的実施形態との関連で説明されるオブジェクトへのアクセスを制御することと関連するコンピュータシステムの態様のみ示す。
【0016】
コンピュータシステム110は、図1ではインターネット120へアクセスするように示されている。インターネット120を通じて、コンピュータシステム110は、サーバ130へアクセスする。コンピュータシステム110は、サーバ130から、情報をダウンロードするが、これにはスクリプトが含まれる。本明細書で使用する「スクリプト(script)」なる用語は、1つまたは複数のコンピュータ実行可能命令の集合を指す。一般に、スクリプトは、コンピュータシステムに、単一の機能または一群の互いに密接する機能を遂行するために提供される比較的小さなプログラムである。しばしば、スクリプトはウェブページによって、そのウェブページにアクセスして来るクライアントコンピュータに対して、そのウェブページをアニメート化するため、または、ユーザに対してよりインタラクティブなエクスピアリアンスを生成するために提供される。しかしながら、本発明は、任意の特定なサイズ、機能または目的のスクリプトに制限されるものではない。更に、本発明はインターネットを通じてダウンロードされるスクリプトに制限されるものでもない。
【0017】
コンピュータシステム110は、スクリプト114を実行するホスト112を含む。ここで、ホスト112は、従来の技術に従ってスクリプトを実行するために構成されるソフトウェアコンポーネントである。ホスト112は、しばしば、「インタプリタ(inerpreter)」、「ジャスト・イン・タイムコンパイラ(just in time compiler)」もしくは「仮想マシン(virtual machine)」と呼ばれるソフトウェアを含む。ホスト112は、スクリプトを実行することに加えて機能を遂行できる。インターネットからダウンロードされるスクリプトの例においては、ホスト112は、ウェブブラウザである。しかし、任意の適切なホストを用いることができる。
【0018】
図示される実施形態においては、スクリプト114は、ホスト112によって、実行のために解釈されるコンピュータ実行可能命令を含む。スクリプト114の実行におけるステップは、コンピュータシステム110内のオブジェクトへのアクセスを含んでもよい。
【0019】
本明細書に説明されるように、オブジェクトは、呼び出しがオブジェクトに対して掛けられた場合に実行されるメソッドを含む可能性のある、コンピュータソフトウェアコンポーネントである。オブジェクトは、従来のコンピュータシステムのように生成されてもよい。ここに説明される実施形態においては、オブジェクトの1つのインスタンスが、あるオブジェクトが、コード、例えば、スクリプト114の実行の際にインスタンス化された場合オブジェクト定義から生成される。図1の従来技術の例においては、いったんあるオブジェクトのインスタンスがコードの実行に対して利用可能になると、そのコードは、そのオブジェクトのメソッドに、そのオブジェクトに対して呼び出しを掛けることで、アクセスする。
【0020】
オブジェクト定義は多数のメソッドの任意のもので提供できる。オブジェクト定義は、コンピュータシステム110のオペレーティングシステムの一部として提供することもできる。オブジェクト定義は、代替として、または追加的に、コンピュータシステム110上に、特別にスクリプト114が実行することを許可するためにロードすること、もしくは、ホスト112との関連で提供することができる。もう1つの例として、オブジェクト定義は、スクリプト112の実行とは無関係なアプリケーションプログラムの一部としてロードすることもできる。
【0021】
ここでは、コンピュータシステム110内のオブジェクト定義の集合がオブジェクトライブラリ116として描かれている。オブジェクトライブラリ116は、ここでは、2つのオブジェクト定義162およびオブジェクト定義164を有するように示されている。しかしながら、オブジェクトライブラリ116は、より多数のオブジェクトに対する定義を含むこともできるが、ここでは簡素化のために、2つのオブジェクト定義のみが示されている。更に、図1は単一のオブジェクトライブラリ116を示す。本発明の実施においては、全てのオブジェクト定義が、単一のファイルまたは他の位置内に格納される必要はない。オブジェクトライブラリ116は、ホスト112内で実行するスクリプト114によるアクセスに対して利用可能なオブジェクトの集合の論理的表現とみなされる。
【0022】
オブジェクトライブラリ116は、コンピュータ110上のスクリプトの実行において使用される多数の機能を遂行するオブジェクト定義を含む。オブジェクトライブラリ116内のオブジェクトにより遂行されるこれら機能は、システム資源118へのアクセスを含む。
【0023】
システム資源118は、コンピュータシステム110のハードウェアまたは他のソフトウェアコンポーネントと対話するコンポーネントを含むことが可能である。例えば、システム資源152は、ファイル管理システムを実装する。オブジェクトライブラリ116に定義されるオブジェクトは、このファイル管理システムに、情報を格納または取り出すためにアクセスする複数のメソッドを含む。他のシステム資源は他の機能を遂行する。例えば、システム資源152またはシステム資源152は、コンピュータシステム110の人であるユーザとの対話、もしくはメールの管理と関連する機能を遂行する。コンピュータシステムは、ここには簡素化のために、3つのシステム資源152、152、152のみ示すが、多数のシステム資源を有することが可能である。
【0024】
これらシステム資源の各々は、オブジェクトライブラリ116に、システム資源と関連する1つもしくは複数のオブジェクト定義を含んでよい。これらオブジェクト定義は、システム資源の機能にアクセスするために呼び出されるべきメソッドを含むことができる。
【0025】
図1は、例示として、ActiveX(登録商標)なるオブジェクトである、オブジェクトを示す。こうして、これらオブジェクトは、ActiveX(登録商標)なるオブジェクトに対する従来の方法と同じようにインタフェースを実現するものとして示されている。しかしながら、任意の適切なオブジェクトのタイプおよび任意の適切なインタフェースの形態を用いることができる。
【0026】
図1は、オブジェクトライブラリ116に、ActiveX(登録商標)なるオブジェクトに対して定義された様々なインタフェースを実現するオブジェクト定義162およびオブジェクト定義164を示す。この例においては、各オブジェクト162およびオブジェクト164は、IDispatchなるインタフェースおよびIUnknownなるインタフェースを実現する。IDispatchなるインタフェースを実現することで、スクリプト、例えばスクリプト114の命令を解釈するオブジェクトをホスト112から呼び出すことが可能になる。IUnknownなるインタフェースにより、COM標準に従ってコンパイルされたコードからオブジェクトにアクセスすることが可能になる。
【0027】
オブジェクト162は、更に、IObjectSafetyとして識別されるインタフェースを実現する。このIObjectSafetyなるインタフェースはオブジェクト162内に、オブジェクト162の開発者がこのオブジェクトに「安全モード(safe mode)」の動作を提供したために、実現される。安全モードの動作内で呼び出されるオブジェクトのどのようなメソッドも、セキュリティゾーンにおける実行に対して「安全(safe)」であると判断される。この例においては、ファイルを変更したり、コンピュータから情報を不正に露出させたり、またはコンピュータシステムもしくはそのユーザに対して有害な動作を遂行することで、コンピュータシステム110の動作を混乱させるためにメソッドを使用することができなければ、そのメソッドは「安全(safe)」であると判断される。しかしながら、安全モードは、適切であれば、どのような方法で実現しても良い。例えば、オブジェクトは、安全モードにて動作しているときは、これがシステム資源118にアクセスする任意のメソッドが呼び出される場合、ユーザ通知を生成するように実現することもできる。オブジェクトは、任意のそのようなメソッド呼び出しを、そのオブジェクトが、この通知に応答して、ユーザの許可を受信しない限り、実行しないようにすることもできる。
【0028】
対照的に、オブジェクト164は、IObjectSafetyなるインタフェースを実装しない。オブジェクト162とオブジェクト164とのこの相違は、オブジェクトがホスト112内で実行しているスクリプト114のアクセス方法に影響を与え、これにより、ホスト112が「セキュリティゾーン(security zone)」を実現することが可能となる。図1の例においては、オブジェクト定義162からインスタンス化されたオブジェクトはセキュリティゾーンからアクセスされるが、オブジェクト定義164からインスタンス化されたオブジェクトはアクセスされない。
【0029】
本明細書で用いる「セキュリティゾーン(security zone)」なる用語は、コンピュータシステム110内の他のソフトウェアコンポーネントへの制限されたアクセスを有することを意図されたコンピュータ実行可能命令の集合を表す。多くのインスタンスにおいて、セキュリティゾーンは、インターネットからダウンロードされるスクリプトに対して実現されるが、しかし、これは任意の信頼できないコードに対して実現することもでき、または、あるソフトウェアがコンピュータシステムの他のコンポーネントへ制限されたアクセスを有することを要求される任意の他の状況においても実現することができる。
【0030】
スクリプト114は、オブジェクト162をインスタンス化するコンピュータ実行可能命令を含むことが可能である。このような命令を解釈すると、ホスト112は、オブジェクトライブラリ116にアクセスし、オブジェクト162のインスタンスを生成する。セキュリティゾーンから生成された場合、オブジェクト162のインスタンスは、「安全モード」で動作することとなる。その後は、このオブジェクト上の全ての呼び出しが、このオブジェクトのこのインスタンスを通じてなされる。こうして、セキュリティゾーンで実行するスクリプト114は、オブジェクト定義162の、セキュリティゾーンに対して安全であると判断されるメソッドへのアクセスを有する。
【0031】
対照的に、オブジェクト定義164は、これはIObjectSafetyなるインタフェースを含まないために、スクリプト114がこのオブジェクト定義からインスタンスを生成すべきという命令を含む場合でも、ホスト112によってインスタンス化されることはない。スクリプト114内の、オブジェクト164のインスタンスが形成されるべきことを指示するどの命令も、ホスト112がエクセプションを生成するようにさせる。このようなエクセプションに応答しての処理の結果、スクリプト114の実行は終端されるか、または他の適切なエラー修正ステップがされることとなる。しかしながら、オブジェクト164のいかなるインスタンスも生成されないために、オブジェクト164上のメソッドを呼び出しているスクリプト114内の命令は遂行されることはない。こうして、オブジェクト164の安全ではないと判断されたメソッドは、スクリプト114、またはセキュリティゾーン内から実行している他のプログラムにアクセスすることはできない。
【0032】
図1は、更に、スクリプト114が、セキュリティゾーンにもかかわらず、それでも安全ではないと判断される機能を遂行できるオブジェクトへアクセスをどのようにして得るかについて示す。セキュリティゾーンは、スクリプト114がオブジェクト定義164から直接的にオブジェクトをインスタンス化することは阻止するが、このようなオブジェクトはオブジェクト162のメソッドからインスタンス化することができる。例えば、スクリプト114はオブジェクト162をインスタンス化することができるとすると、このオブジェクトはスクリプト114からアクセスすることができる。オブジェクト162に向けたメソッド呼び出しは、結果としてオブジェクト164をインスタンス化することができる。オブジェクト162上の呼び出されたメソッド呼び出しは、オブジェクト164のインスタンスをスクリプト114に送り返す。こうして、スクリプト114は、、たとえホスト112によって実装されているセキュリティゾーンがオブジェクト164への直接的なアクセスを禁止したとしても、オブジェクト164のインスタンスへのアクセスができる。スクリプト114は、次にオブジェクト164上のメソッドを呼び出し、このメソッドでシステム資源118にアクセスし、コンピュータシステム110の動作を偶発的にまたは故意に混乱させることもできる。
【0033】
図2は本発明の実施形態に従うコンピュータシステムを動作するためのプロセスを示す。このプロセスは、スクリプトに対して、この間接的なインスタンス化を通じて、安全ではないと判断されたメソッドにアクセスさせることを回避する。図2のプロセスは、オブジェクトへのアクセス制御をメソッド呼び出し毎に逐次に提供することを可能にする。あるオブジェクトがセキュリティゾーンから、直接的にインスタンス化されたか、または間接的にインスタンス化されたかとは関係なく、そのオブジェクト上の安全ではないと判断されるメソッドに向けて呼び出しが掛けられた場合は、その呼び出しは、拒絶されるか、または安全ではないと判断されるメソッドへのアクセスが制限されるような他の方法で処理される。
【0034】
図2のプロセスのステップは、コンピュータシステム内の1つまたは複数のソフトウェアコンポーネントによって遂行される。幾つかの実施形態においては、図2のプロセスは、ウェブブラウザ内の、スクリプトの命令を解釈するコンポーネントによって遂行される。
【0035】
図2のプロセスは、スクリプトの命令を解釈するための従来のステップから開始する。ステップ210において、このプロセスは、オブジェクトをインスタンス化するための命令から開始する。このような命令はスクリプト内にエンコードされても良い。
【0036】
そのプロセスは、判定ブロック212に進む。判定ブロック212において、そのオブジェクトがセキュリティゾーン内におけるインスタンス化に対して安全であるか否かに関する判定がなされる。この例においては、オブジェクトは、それが制限的インタフェース、例えば、IObjectSafetyで定義されている場合は、「安全」であると判断される。しかしながら、オブジェクトが安全であるか否かを決定するためには、適切であれば、どのような基準を採用しても良い。
【0037】
そのオブジェクトが安全ではないと判断された場合は、このプロセスは終端ポイント214へと進む。終端ポイント214は、エクセプションを生成すること、エラーハンドラを実行すること、または、セキュリティゾーン内での実行に対して、安全ではないと判断されるオブジェクトをインスタンス化しようというスクリプトによる試みに応答して、他のステップを遂行することを伴う。セキュリティゾーン内での実行に対して安全ではないと判断されるオブジェクトをインスタンス化しようとする試みの処理は、従来のコンピュータシステムと同様であっても良いが、しかし、適切であれば、どのような処理を遂行しても良い。
【0038】
逆に、オブジェクトが安全であると判断された場合は、処理はブロック216へと進む。ブロック216において、そのオブジェクトがインスタンス化される。オブジェクトのインスタンス化は、従来のコンピュータシステムと同様な方法で遂行されるが、しかし、適切であれば、オブジェクトをインスタンス化するためのどのようなメカニズムを用いても良い。従来のコンピュータシステムと同様に、セキュリティゾーンからのオブジェクトのインスタンス化には、そのオブジェクトが安全モードで実行しているということを記録することが含まれる。あるオブジェクトのあるインスタンスが安全モードで動作しているということの記録は、適切であれば、どのような方法でも達成することができるが、しかし、以下に説明される例においては、オブジェクトの各インスタンスは、メモリにアクセスし、ここでは「SafeMode(安全モード)」と呼ばれる、ブール変数の値を格納している。このSafeModeの値は、そのインスタンスが安全モードで実行するように生成されているときは真にセットされる。
【0039】
ホストは、次に、スクリプト内の更なる命令を実行する。あるメソッドへの呼び出しが受信されると、処理はブロック218へと進む。幾つかの実施例においては、メソッドに向けられた呼び出しは、あるスクリプトを処理している際になされる全てのメソッド呼び出しを傍受するコンポーネントによって受信および処理される。スクリプトを解釈する従来のシステムと同様に、メソッド呼び出しを指定する命令は、ホスト内の、しばしばスクリプトエンジンと呼ばれるソフトウェアコンポーネントを呼び出すことで処理される。このスクリプトエンジンは、オブジェクトをフェッチし、そのオブジェクトへのインタフェースを取得する。
【0040】
しばしば、ソフトウェアシステムの複数のオブジェクトへのインタフェースが、共通の処理ステップを遂行する共有コードで実現される。インタフェースを実現するためのこの共有コードは、ここでは「インボーカ(invoker)」と呼ばれる。
【0041】
従来技術によるコンピュータシステムにおいては、1つのインボーカは、1つもしくは複数のインタフェースを実現し、入力として、呼び出し命令を、そのインボーカによって実現されるインタフェースに対して適切なフォーマットで受信する。インボーカは、呼び出しを受信するが、これはあるメソッドを識別する引数と、そのメソッドを呼び出すときにパスされるべき引数とを含む。インボーカは、この入力情報の構文を解析し、所望のメソッドを遂行するためのコンピュータ実行可能コードがそこに格納されているコンピュータシステム110内の特定の位置を決定する。インボーカは、次に、このコードにアクセスし、結果を受信し、この結果をフォーマット化し、これをそのインボーカによって実現されるインタフェースを通じて呼び出しプログラムに送り返す。
【0042】
図2に示される本発明の実施形態に従うインボーカは、従来技術によるシステム内のインボーカと同様のどのような機能も遂行するようにして良い。しかしながら、図2のプロセスにおいて用いられるインボーカは、処理を受信されたメソッド呼び出しに基づいて遂行するように構成しても良い。セキュリティゾーンが実現されている図2の例においては、メソッド呼び出しを処理することで、その呼び出しが許可されるべきか、拒絶されるべきか、または、別な形態に変更されるべきであるかが決定される。こうして、各メソッド呼び出しは、インボーカによって、条件付きで処理される。加えて、メソッド呼び出しが許可される場合は、インボーカは、あるメソッドに対する入力を、そのメソッドを呼び出す前に処理するか、または、そのメソッドによって生成された結果を、その結果を呼び出しプログラムに送り返される前に処理する。
【0043】
図2のプロセスにおける残りのステップは、インボーカによって遂行される条件付の処理の例を与えている。判定ブロック220において、その呼び出しはセキュリティゾーンからなされたのか否かの判定がされる。幾つかの実施形態においては、メソッド呼び出しは、メソッド呼び出しが掛けられたオブジェクトが真にセットされたSafeMode(安全モード)フィールドを有する場合は、セキュリティゾーンからされたものと判断される。上述のように、セキュリティゾーン内でインスタンス化されたすべてのオブジェクトは、直接的か間接的かのどちらかで、真にセットされたSafeModeフィールドを有する。しかしながら、呼び出しがセキュリティゾーンからなされたか否かの判定は、適切であれば、どのようなメソッドによっても行うことができる。
【0044】
そのメソッド呼び出しはセキュリティゾーンからされてない場合は、処理は、ブロック222へと進む。ブロック222において、そのメソッドが、従来の処理を用いて呼び出しを掛けることを許可することで遂行される。ブロック224において、そのメソッドの遂行の結果が呼び出しプログラムに送り返され、このプロセスは終端する。結果は、従来の呼び出し処理と同様に、呼び出しプログラムに送り返すためにフォーマット化しても良い。
【0045】
逆に、その呼び出しは、セキュリティゾーンからされている場合は、サブプロセス226が遂行されるが、ここでは、呼び出しは条件的に実行されるか、また別の方法で処理される。サブプロセス226は、ブロック230から開始する。ブロック230において、呼び出されたメソッドは、セキュリティゾーンで実行されることを許可されているか否か判定される。メソッドがセキュリティゾーンにおいて実行することを許可されているか否かを決定するためには、適切であれば、どのようなメカニズムを用いても良い。幾つかの実施形態においては、オブジェクトの開発者は、セキュリティゾーン内における実行に適するメソッドを、従来、オブジェクト全体がセキュリティゾーンからの実行に対して安全であるか否かを判断するために適用されてきたのと同一の基準を用いて識別する。しかしながら、ブロック230における決定は、オブジェクト全体に対してではなく、メソッド呼び出し毎になされる。
【0046】
処理は次に判定ブロック232へと進む。判定ブロック232において、このプロセスは、その呼び出されたメソッドが実行に対して許可されているか否かに基づいて分岐する。その呼び出されたメソッドは許可されてない場合は、処理はエラー終端234へと進む。エラー終端234においては、適切であれば、どのような処理を遂行しても良い。例えば、エラー終端234における処理は、結果として、エクセプションを生成すること、エラーハンドラを実行すること、または他の適切な応答を生成することもできる。
【0047】
逆に、その呼び出されたメソッドが、セキュリティゾーンで実行に対して許可されている場合は、処理はブロック235に進み、ここでそのメソッドに対する入力が、そのメソッドに対する呼び出しより前に処理される。これら入力に関しては、幾つかの実施形態においてはこれら入力に関する処理は遂行されないが、要求されるどのような処理を遂行しても良い。例えば、このような処理を、遂行監視アプリケーションの一部として、入力値を記録するために用いることもできる。
【0048】
入力がブロック235において処理されるか否かに関係なく、処理は次にブロック236へと進む。ブロック236において、そのメソッドが遂行される。そのメソッドはブロック236において、そのメソッドがブロック222において遂行されたのと同一の方法にて遂行される。
【0049】
しかしながら、ブロック236においてそのメソッドを遂行することで得られた結果は、更に処理される。この図示された実施形態において、判定ブロック240は、その結果はオブジェクトであるか否かを判断するためにその結果を更に処理する。様々なタイプの結果を処理するコンピュータシステムが知られており、このようなシステムは、結果のタイプに基づいて、異なる方法で結果を処理する。結果がオブジェクトであるか否かを識別するためには、従来の技術を採用することもできる。例えば、あるオブジェクトは、その結果がある特定のフォーマットのポインタであるか否か識別できる。
【0050】
結果がオブジェクトであるか否かを識別するために具体的にどのようなメカニズムが用いられるかとは関係なく、その結果がオブジェクトではないときは、処理はブロック242へと進む。ブロック242において、結果は呼び出しプログラムに送り返される。ブロック242において、この結果は従来の方法で送り返される。従って、ブロック242における処理は、ブロック224において遂行される処理と同一である。
【0051】
しかしながら、結果がオブジェクトである場合は、処理は、判定ブロック242からブロック250へと進行する。ブロック250において、呼び出されたメソッドを遂行した結果として生成されるそのオブジェクトに対してラッパーが生成される。ここで、「ラッパー(wrapper)」なる用語は、ラップされたソフトウェアコンポーネントと、それが呼び出す外部コンポーネントとの間に挿入されたソフトウェアコンポーネントを表す。ラッパーは、外部コンポーネントに対して、そのラップされたコンポーネントと同一の形式にてインタフェースを提供する。このラッパーは、このラップされたコンポーネントに予め定義されたインタフェースを通じて順を追ってアクセスする。しかしながら、ラッパーは、外部コンポーネントからの呼び出しに関して処理を、ラップされたコンポーネント上に呼び出しを掛ける前に遂行することも、またはラップされたコンポーネントによって提供される結果を、それを外部コンポーネントに提供する前に処理することもできる。
【0052】
この例において、ブロック250において生成されるこのラッパーは、そのオブジェクトが安全モードにおいて生成されたことの指標を記録する格納位置を含む。ブロック252において、このSafeModeフィールドが真にセットされる。
【0053】
処理は次にブロック254に進む。ブロック254において、ラッパーが、その呼び出されたメソッドの遂行の結果として送り返される。呼び出されたメソッドの遂行の結果としてオブジェクトがインスタンス化されるが、呼び出しプログラムは、そのオブジェクトが直接にアクセスできるオブジェクトに関する情報を受信することはない。更に、呼び出しプログラムは、インスタンス化されたオブジェクトに対するラッパーに関する情報のみを受信する。結果として、そのオブジェクト上で行われるその後の全ての呼び出しは、ブロック250において生成されたこのラッパーを通じて行われる。
【0054】
このインスタンス化されたオブジェクトは、これがセキュリティゾーン内で生成されたことを示す指標は含まないが、ラッパーがこのような指標を含む。結果として、そのオブジェクト内のメソッドに対するその後のどのような呼び出しも、安全モードサブプロセス226に従って処理されることとなる。SafeMode変数を格納するためにラッパーを生成することで、セキュリティゾーンにおける処理が要求されるという指標が、たとえそれらオブジェクトがセキュリティゾーンで間接的に生成されるとしても、あるオブジェクトから別のオブジェクトへと転送される。そのオブジェクトによってインスタンス化されるどのようなさらなるオブジェクトも、同様にセキュリティゾーンでの処理に対して生成されたものと示されることとなる。
【0055】
図3に移り、ここには図2のプロセスを遂行可能なコンピュータシステムに対するソフトウェアアーキテクチャが示されている。図3はホスト312を示す。ホスト312は、例えば、インターネットからダウンロードされたスクリプト314が実行されるセキュリティゾーンを実現するウェブブラウザであり得る。このコンテキストにおいては、スクリプト314はオブジェクトへのアクセスを与えられるべきでない信頼できないコードを表わしているが、このオブジェクトは信頼できないコードによる実行に対して安全でないと判断されるものである。
【0056】
しかしながら、代替の実施形態も可能である。例えば、ホスト312は、信頼できるコード、例えば、符号付きC++コードを実行することもできる。この実施形態においては、メソッド呼び出しの処理は、信頼できるコードのみが、システム資源を操作するオブジェクトに、アクセスできるように遂行される。代替として、この実施形態における処理は、信頼できるコードが信頼できないコードには絶対にアクセスしないということで、遂行することもできる。
【0057】
スクリプト314は、ここでは、ホスト312によって解釈される複数の命令を含むように示されている。図3に示される命令は、簡素化された形態であり、いかなる特定のプログラミング言語を表すことも意図されてない。スクリプト314は、説明される機能を遂行するために、適切であれば、どのような言語による命令を用いて実現することもできる。
【0058】
命令316は、オブジェクトAとして識別されるオブジェクトをインスタンス化するための命令である。命令316を実行すると、オブジェクトAのインスタンス362が生成されることとなる。インスタンス362は、オブジェクト定義から従来のコンピュータシステムと同様な方法で生成することができる。この例においては、コンピュータ可読媒体が、オブジェクト定義を含むクラス340を格納している。図3には、オブジェクト定義342およびオブジェクト定義344が示されている。簡素化のために、これら2つのオブジェクト定義のみを示すが、コンピュータシステムは、各々が複数のオブジェクト定義を含む複数のクラスを含むことができる。
【0059】
命令316が実行されると、ホスト312は、クラス340にアクセスし、オブジェクトAのインスタンスを生成するために適切であるオブジェクト定義を取得する。命令316は、解説の目的で、簡素化されたシンタックスで書かれている。オブジェクトのインスタンス化を特定する実際の命令は、オブジェクトのインスタンスの生成において用いるための適切なオブジェクト定義を特定するための十分な情報を含み、図3に示されているより多くの情報が必要となる。この例においては、オブジェクト定義342を用いて、オブジェクトのインスタンスが生成されている。
【0060】
オブジェクトのインスタンスが生成されると、このインスタンスはホスト312が生成したセキュリティゾーン内で実行している命令に応答して生成されたために、安全モードで動作するものとしてこのインスタンスはセットされる。この例においては、このインスタンス362内のSafeModeフィールド372が真にセットされる。
【0061】
命令318は、インスタンス316において生成されたオブジェクトのインスタンス上の、ここではメソッド1(method1)と呼ばれるメソッドを呼び出す命令である。ホスト312は、この命令318を、従来のシステムにおける呼び出し命令の処理と類似の方法にて処理する。従来のシステムにおいては、命令、例えば、命令318は、IDispatchなるインタフェースを実現するコンポーネントを通じて処理される。こうして、図3は、IDispatchインタフェースを実現するインボーカ330を示し、こうして、命令318が、最初に、インボーカ330にて、オブジェクトへのIDispatchなるインタフェースを通じてのアクセスの一部として処理される。
【0062】
インボーカ330は、このインボーカが、命令318で識別されるメソッドへの呼び出しを、条件的に掛けるという点で従来のシステムにおけるインボーカとは異なる。実施形態において示されるインボーカ330は、呼び出し命令318を、メソッド1に向けて呼び出しを掛ける前に処理することで、その呼び出しが可能か否か判断する。
【0063】
インボーカ330は、呼び出し命令318を処理することで、そのメソッドがSafeModeで実行に対して許可されているか否かを判断する。実施形態において示されるインボーカ330は呼び出されたメソッドが、その呼び出されたメソッドを含むオブジェクトに対するオブジェクト定義と関連するメタデータから、SafeModeで実行することを許可されているか否かを判断する。図3に示される例においては、メタデータは、クラス340内に、ホワイトリスト350として格納されている。ホワイトリスト350は、SafeModeにおける実行に対して許可されているクラス340内に定義されるメソッドのリストを含む。ホワイトリスト350上にメソッド1を見つけると、インボーカ330は、オブジェクトAのインスタンス362に向けての呼び出しを許可して、メソッド1が遂行される。
【0064】
図3は、クラス340に定義される全てのメソッドに関する情報を含むクラス340に対する単一のホワイトリスト350を示す。ホワイトリストは、各クラスに対して提供されても良い。しかしながら、あるホワイトリストは、そのソフトウェア階層の任意の適切なレベルと関連付けることもできる。例えば、複数のホワイトリストを、各クラスに対して、1つのホワイトリストが各オブジェクト定義に対応するように提供することができる。代替として、ホワイトリストはホスト312と関連させることも、または、コンピュータシステムの他のソフトウェアコンポーネントと関連させることもできる。更に、複数のホワイトリストおよび/またはメタデータを格納する複数のデータ構造を提供し、メソッド呼び出しに関する条件付き処理の一部として調べることもできる。
【0065】
示される実施形態においては、オブジェクトAは、ActiveX(登録商標)なるオブジェクトであり、呼び出しは、ActiveX(登録商標)なるオブジェクト内の実行可能なコードに向けてインタフェースを通じて掛けられる。この例においては、この呼び出しは、IDispatchなるインタフェースを通じて、従来のコンピュータシステムと同様に掛けられるが、しかし、他のインタフェース、例えば、IUnknownを通じて掛けることもできる。この例においては、オブジェクトが、IDispatchなるインタフェースを通じて呼び出されると、インボーカ330は、呼び出しを傍受し、呼び出されたメソッドが実行に対して許可されている場合は、選択的に呼び出しが続行することを許可する。許可されている場合は、その呼び出しは、IDispatchなるインタフェースを通じて、ActiveX(登録商標)なるオブジェクトへの従来の呼び出しと同様な方法にて進行する。しかし、呼び出しが進行することを許可するために適切であればどのようなメソッドを用いても良い。
【0066】
スクリプト314は、類似の方法で処理されるオブジェクトにアクセスする他の命令を含んでも良い。例えば、命令320はオブジェクトBをインスタンス化する命令であり、命令322はオブジェクトB上のメソッドを呼び出す命令である。命令320が実行されると、ホスト312は、オブジェクトBのインスタンス364を、オブジェクトAのインスタンス362が、命令316に応答して生成されたのと同様の方法で生成する。この例においては、クラス340内のオブジェクト定義344を用いて、インスタンス364が生成される。インスタンス364も、インスタンス362と同様に、真にセットされたSafeMode変数を含み、こうして、インスタンス364はセキュリティゾーン内から実行された命令に応答して生成されたことを示す。この例においては、インスタンス364は、更に、メソッド2に対するエントリも含むが、これはインスタンス364を生成するために用いられるオブジェクト定義344の一部として定義される。
【0067】
命令322が実行されると、呼び出しがメソッド2に対して、命令318の実行に応答して呼び出しがメソッド1に対して行われるのとほとんど同一の方法で行われる。メソッド1もメソッド2も両方ともホワイトリスト350上に含まれるために、これら呼び出しは両方とも許可される。しかしながら、オブジェクトAおよびオブジェクトBは、各々、ホワイトリスト350上には載ってないメソッドを含む。ホスト312内で実行される任意のコードからこのようなメソッドを呼び出す試みがなされると、結果として、そのメソッドへの呼び出しは拒絶されることとなる。
【0068】
例えば、オブジェクトBは、メソッド3に対するエントリ386を含むよう示されている。図3に示される実施形態においては、メソッド3は、ホワイトリスト350上には含まれない。従って、メソッド3に向けられどのような呼び出しも拒絶される。図2との関連で上記したように、許可されてないメソッドに向けられた呼び出しは任意の方法にて処理される。
【0069】
図4は本発明に従うコンピュータシステムの代替の実施形態を示す。図4はホスト412を示すが、これはホスト312(図3)と同一の方法で実現される。ホスト412は、スクリプト414を実行するが、これは、インボーカ430によって処理されるメソッド呼び出しを含む。インボーカ430は、同様にインボーカ330と同一の形態であり得る。
【0070】
スクリプト414は、図3におけるスクリプト314と同様に、オブジェクトAをインスタンス化する命令416を含む。この命令に応答して、オブジェクトAのインスタンス462が、クラス440内のオブジェクト定義442から生成される。命令416は、セキュリティゾーン内から実行されるために、インスタンス462は真にセットされているSafeMode変数472を含む。
【0071】
命令418は、実行されると、オブジェクトA内のメソッド1を呼び出す。命令418の処理において、インボーカ430は、メソッド1はホスト412に実装されているセキュリティゾーンでの実行に対して許可されているか否か判断する。図4の実施形態においては、クラス440は、実行に対して許可されているメソッドを識別するメタデータを含む。この例においては、このメタデータは、ブラックリスト450である。ブラックリスト450は、SafeModeで実行が許可されないメソッドのリストを含む。この例においては、メソッド1はブラックリスト450には含まれていない。従って、命令418が実行される場合、インボーカ430により、メソッド1に向けられた呼び出しは続行できる。
【0072】
図4に示されるシナリオにおいては、オブジェクトA内のメソッド1にメソッド呼び出しが掛けられると、間接的にオブジェクトBがインスタンス化される。この例においては、メソッド1はエントリ474を有するよう示される。エントリ474に続いて、オブジェクトBが命令476によってインスタンス化される。命令476が実行されると、結果として、オブジェクトBのインスタンス464が生成される。オブジェクトBのインスタンス464は、従来の方法で生成することも可能である。
【0073】
メソッド1における命令476の実行に応答してインスタンス464が生成された後、命令478のところで、メソッド1の実行の結果として、オブジェクトBが送り返される。オブジェクトBは、実施形態において示されるように、ポインタによって表される。しかしながら、オブジェクトを表すためには、適切であれば、どのようなデータ構造も用いることができる。メソッド1の実行に続いてオブジェクトを送り返すためには、命令478は、オブジェクトBに対するポインタを送り返す。
【0074】
インボーカ430は各々の結果を処理し、その結果を送り返すことが、スクリプト414に対して、安全でないコード、またはそのソフトウェアシステムの他の制限されている部分へのアクセスを与える、もしくは与える恐れがあるか否かを判断する。図4の例においては、オブジェクトBは、安全ではないと見られる動作を遂行するメソッドを含む。インボーカ430内における処理においては、オブジェクトBの各々のメソッドを分析することで、これらメソッドのいずれかが「安全でない(unsafe)」か、否か判断される。しかしながら、送り返されるオブジェクトは安全ではないメソッドを含む可能性があるために、送り返されるどのようなオブジェクトも「安全ではない」と判断される。類似する処理を、安全ではないアレイ、または他のタイプの変数に関して遂行することもできる。
【0075】
安全でない結果を生成するリターン変数を識別するために、インボーカ430が使用する具体的なメカニズムが用いられるかとは無関係に、インボーカ430は、更に、スクリプト414が、その結果への、直接的、無防備のアクセスを絶対にしないための手段も講じる。説明の実施形態においては、ラッパーを用いることで、安全ではないと見なされ送り返された変数へのアクセスが制御される。
【0076】
インスタンス464は、安全ではないと判断されるために、インボーカ430はインスタンス464に対してラッパー480を生成する。ラッパー480は、オブジェクトBへインタフェースを提供する一群のコンピュータ実行可能命令を表す。ラッパー480は、ラッパー480がSafeModeで生成されたことを示すビットを格納するためのフィールド482を含む。フィールド482は、ラッパー480が生成されたとき、真にセットされる。インボーカ430は、次に、オブジェクトBを送り返すのではなく、ラッパー480を呼び出しプログラムに送り返す。
【0077】
スクリプト414内の命令418の実行に続いて、スクリプト414は、オブジェクトBにアクセスするために必要な情報を有する。従って、命令420が実行を終えると、これによってオブジェクトB内のメソッド2が呼び出されるのであるが、インボーカ430は、メソッド2への呼び出しを処理する。しかしながら、図に示される実施形態においては、オブジェクトBへのアクセスはラッパー480を通じて行われる。
【0078】
図4に示されるように、ラッパー480は、オブジェクトBに向けてメソッド呼び出しが掛けられたことに応答して、インボーカ430がこれを通じてアクセスされるインタフェースを提供する。このラッパー480が与えるインタフェースは、セキュリティゾーン内でインスタンス化された他のオブジェクトが与えるインタフェースと同一の形態である。こうして、呼び出しが、ラッパー480を通じてオブジェクトBに向けて掛けられると、インボーカ430は、これら呼び出しを、これが他のオブジェクトに向けて掛けられたメソッド呼び出しを処理するのと同一の方法にて処理する。呼び出しをオブジェクトBに向けてラッパー480を通じて掛けることで、その呼び出しがセキュリティゾーン内において許可されているか否かのチェックを行うことが可能になる。この例においては、ラッパー480は、真にセットされたSafeMode変数482を有し、これはインボーカ430に対して、ラッパー480を通じてなされる任意のメソッド呼び出しが制限されているか否かをチェックするように指令する。こうして、ラッパー480を通じての呼び出しは、必要に応じて安全モードの実行に対して処理される。オブジェクトB内の呼び出されたメソッドが、セキュリティゾーン内のアクセスに対して許可されている場合は、インボーカ430は、このような呼び出しの処理を終えると、オブジェクトB内のその呼び出されたメソッドを遂行するコードにアクセスする。図4の例においては、メソッド2はブラックリスト450上にリストされている。従って、インボーカ430が命令420を処理するときに、これはそのメソッド2に向けられた呼び出しを拒絶する。あるメソッド呼び出しを拒絶した時点で、任意の適切な応答が行われるが、これにはエクセプションの生成や、エラーハンドラの実行が含まれる。
【0079】
図示される例においては、オブジェクトBは間接的にインスタンス化されたのではあるが、図4の実施形態によって遂行されるメソッド呼び出し毎の逐次的許可方式のために、メソッド2は、これはセキュリティゾーンでの実行に対して許可されてないために、実行することを阻止される。こうして、アクセス制御がセキュリティゾーンにおいて間接的にインスタンス化されたオブジェクトに対してさえも実現される。
【0080】
更に、オブジェクトに対して、インボーカ430でインタフェースを実現することを要求する以外は、図4の実施形態に示されるメソッド呼び出し毎の逐次的呼び出しアクセス制御を提供するために、オブジェクトBの定義を生成するための、特別なコーディングは要求されない。ホワイトリスト350、ブラックリスト450または他のメタデータへのアクセスは、インボーカ内において、個々のオブジェクトのいかなる追加のコーディングもなしに行われる。スクリプト414から実行されるオブジェクトを特別にコーディングする必要を回避することにより、スクリプトが実行されるコンピュータシステム内において用いるオブジェクトを生成する開発者に掛かる負担が軽減される。更に、コンピュータシステム、例えば、コンピュータシステム110(図1)は、スクリプト414を実行するホスト412に加えて、多くのタイプのプログラムによってアクセスされるオブジェクトを含んでも良い。メソッド呼び出し毎に逐次的にアクセス制御を実現するための開発者に掛かる負担が軽減されるために、ホスト412内で実行しているスクリプトが、他のプログラムによってコンピュータシステムにインストールされるオブジェクトを利用できる機会が増大される。
【0081】
こうして、本発明の少なくとも1つの実施形態の幾つかの態様が説明されたが、当業者においては、様々な代替、修正、および改善が容易に考えられることを理解されるべきである。
【0082】
例えば、本発明は、セキュリティゾーンを実現するウェブブラウザとして説明することもできる。このような実施形態においては、各メソッド呼び出しは、それが実行するのに安全であるか判断するために処理される。しかしながら、説明されたメソッド呼び出しを傍受および処理するためのアプローチは、他のコンテキスト内において適用することもできる。例えば、スクリプトを実行するあらゆるプログラムは、メソッド呼び出しに関して処理を遂行するために、メソッド呼び出しを傍受するように動作するこができる。1つの例として、プログラムロギングメソッド呼び出しでメソッド呼び出しを傍受するようにしても良い。もう1つの例として、メソッド呼び出しを傍受するプログラムで、あるプログラムの実行のコストを計算するようにすることも、または他の方法よりメソッド呼び出しを処理するようにすることもできる。更に、メソッド呼び出しを、ホワイトリスト、ブラックリストまたは他の適切な手段に従って選択的に処理することもできる。
【0083】
更に、本発明は、スクリプトの処理に制限されるものではない。本発明は、オブジェクトへの選択的なアクセスが要望されるあらゆるコンテキスト内において採用することができる。
【0084】
更に、制限されたインタフェースを実現するオブジェクトは、IObjectSafetyとして知られるインタフェースを実現するものとして説明された。このインタフェースは、ActiveX(登録商標)なるオブジェクトが使用される場合に適用可能な例としての役割を果たす。セキュリティインタフェースは、任意の適切な方法で実現することができる。一例として、あるオブジェクトに向けて、呼び出しがセキュリティゾーン内で動作しているか否かに関係なく呼び出しを掛けるために単一のインタフェースを提供するが、このインタフェースは動作モードを識別するためにセットされるパラメータを含むようにすることもできる。
【0085】
更に、インボーカ430は、IDispatchなるインタフェースを通じて行われる全ての呼び出しを傍受するものとして説明された。インボーカ430は、追加の、または他のインタフェースを通じて行われる呼び出しを傍受することもできる。例えば、インボーカ430は、呼び出しを、IUnknownまたはIDispatchExなるインタフェースまたは任意の他の適切なインタフェースを通じて傍受することもできる。
【0086】
更に、ラッパーは、メソッド呼び出しがオブジェクトを送り返えした場合に生成されるものとして説明された。他のリターン変数も同様にしてセキュリティに係わる事項を生み出し、ラッパー内に入れて送り返すこともできる。例えば、無防備のオブジェクトを、アレイ内のエントリとして送り返すこともできる。インボーカ330またはインボーカ430は、例えば、メソッド呼び出しの結果として送り返されるアレイ内の各エントリを分析することもできる。無防備のオブジェクトを含むどのようなエントリも、それらオブジェクトに対するラッパーと置換することもできる。代替として、インボーカは、単に、アレイを含むどのようなリターン値も不許可とすることもできる。
【0087】
同様にして、あるメソッドは、呼び出しプログラムが無防備のオブジェクトまたは他の安全でないコードにアクセスすることを許可するように、入力変数を修正することもできる。インボーカ330またはインボーカ440は、入力変数を走査し、無防備のオブジェクトへのアクセスを許可するように修正されているアレイを含む入力変数を識別することもできる。そのような入力変数を有する呼び出しは拒絶するか、または安全でないオブジェクトにアクセスを提供することを回避するように処理することもできる。
【0088】
このような代替、修正および改善はこの開示の一部分であると意図され、本発明の精神および範囲内であるものと意図される。従って、上述の説明および図面は単に例示に過ぎない。
【0089】
更に、本発明の上述の実施形態は、多数の方法のいずれで実現することもできる。例えば、これら実施形態を実現には、ハードウェア、ソフトウェアを用いることも、またはこれら組み合わせを用いることもできる。ソフトウェアで実現された場合には、そのソフトウェアコードは、単一のコンピュータ内に提供されるか、複数のコンピュータ間に分散して提供されるのかに関係なく、任意の適切なプロセッサまたはプロセッサの集合上で実行することができる。
【0090】
更に、本明細書で概説された様々なメソッドまたはプロセスは、多様なオペレーティングシステムもしくはプラットホームの任意の1つを採用する1つもしくは複数のプロセッサ上で実行可能なソフトウェアとしてコード化することもできる。加えて、このようなソフトウェアは、複数の適切なプログラミング言語および/もしくは従来のプログラミングまたはスクリプティングツールのいずれを用いて書くこともでき、そして更に、フレームワークもしくは仮想マシーン上で実行される実行可能なマシーン言語コードもしくは中間コードとしてコンパイルしても良い。
【0091】
これとの関連で、本発明は、1つもしくは複数のコンピュータまたは他のプロセッサ上で実行されると、上述の本発明の様々な実施形態を実現するメソッドを遂行する1つもしくは複数のプログラムをエンコードされた1つのコンピュータ可読媒体(もしくは複数のコンピュータ可読媒体(例えば、コンピュータメモリ、1つもしくは複数のフロッピディスク、コンパクトディスク、光ディスク、磁気テープ等)として具現しても良い。これら複数のコンピュータ可読1つまたは複数媒体は、移送可能であり、これらの上に格納された1つもしくは複数のプログラムは、上述の本発明の様々な態様を実現するために、1つもしくは複数の異なるコンピュータもしくは他のプロセッサ上にロードしても良い。
【0092】
本明細書で用いられる「プログラム(program)」または「ソフトウェア(software)」なる用語は、一般的な意味において、コンピュータもしくは他のプロセッサを、上述の本発明の様々な態様を実現する目的でプログラムするために採用することができる、任意のタイプのコンピュータコードもしくはコンピュータ実行可能命令のセットを指す。加えて、この実施形態の1つの態様に従うと、実行される本発明のメソッドを遂行する1つもしくは複数のコンピュータプログラムは、単一のコンピュータまたはプロセッサ上に存在する必要はなく、本発明の様々な特徴を実現するために複数の異なるコンピュータまたはプロセッサ間にモジュール形式にて分散させても良いことを理解されるべきである。
【0093】
コンピュータ実行可能命令は、多くの形態、例えば、1つもしくは複数のコンピュータまたは他のデバイスにて実行されるプログラムモジュールで可能である。一般に、プログラムモジュールは、特定のタスクを遂行し、または特定のアブストラクトデータタイプを実現する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。典型的には、このプログラムモジュールの機能が、様々な実施形態において要求されるように、結合また分散される。
【0094】
本発明の様々な特徴は、単独で用いることも、組み合わせて用いることも、または上述の実施形態においては具体的に説明されなかった多様な配置によって用いることができ、従って、この適用は、上述の説明において明示されている、または図面に示されている、コンポーネントの詳細および配置に制限されるものではない。例えば、一実施形態において説明されるさまざまな態様は、他の実施形態において説明されている複数の態様と、任意の方法で組み合わせても良い。
【0095】
クレーム内におけるクレーム要素を修飾するための「第1の(first)」、「第2の(second)」、「第3の(third)」などの順序を示す用語の使用は、これ自体、任意の優先性、先行性、クレーム要素の別のクレーム要素に対する順番、またはメソッドの動作が遂行される時間的順序を示すものではなく、これらは単に、クレーム要素を区別する目的で、ある名称を有する1つのクレーム要素を、(順序を示す用語の使用を除いては)同一の名称を有するもう1つの要素と区別するためのラベルとして用いられている。
【0096】
更に、本明細書で用いられている語法および用語は、説明を目的とするものであり、制限的なものとして見なされるべきではない。「including(含む)」、「comprising(含む)」、または「having(有する)」、「containing(含む)」、「involving(伴う)」およびこれらのバリエーションの使用は、本明細書では、その後にリストされている項目およびこれらの同等物並びに追加の項目を包含することを意味する。

【特許請求の範囲】
【請求項1】
オブジェクトのメソッドの安全性を検証するプロセスであって、前記オブジェクトは複数のメソッドを有し、前記プロセスは、
前記メソッドと関連する情報を前記オブジェクトと、コンピュータが、関連付けるステップであって、前記情報は、第1のシナリオにおいて実行可能なメソッドのサブセットを識別する、関連付けるステップと、
前記オブジェクト内の呼び出されたメソッドへの呼び出しを、前記コンピュータ上のインタフェースコンポーネントにより、受信するステップと、
前記呼び出されたメソッドへの呼び出しを許可すべきか否かを判定する処理を、前記インタフェースコンポーネントにより、実行するステップであって、当該処理は、前記メソッドと関連する情報にアクセスすることを含む、処理を実行するステップと、
前記処理の結果に基づき、前記呼び出されたメソッドへの呼び出しを、前記インタフェースコンポーネントにより、選択的に許可するステップであって、前記呼び出されたメソッドへの呼び出しを選択的に許可するステップは、前記呼び出されたメソッドが前記サブセット内にあるか否かに基づいて前記呼び出されたメソッドの実行を開始するステップ、ならびに、前記呼び出されたメソッドが前記サブセット内にないか否かに基づいてエクセプションを生成するステップを含む、選択的に許可するステップと
を含む、ことを特徴とするプロセス。
【請求項2】
前記呼び出されたメソッドが前記サブセット内にあるか否かに基づいて前記呼び出されたメソッドの実行を開始するステップは、前記呼び出されたメソッドが前記サブセット内に存在しない場合に、前記呼び出されたメソッドの実行を開始するステップを含む、ことを特徴とする請求項1に記載のプロセス。
【請求項3】
前記呼び出されたメソッドへの呼び出しを選択的に許可するステップは、前記呼び出されたメソッドに関する第2の情報を選択的に格納するステップを含む、ことを特徴とする請求項1に記載のプロセス。
【請求項4】
前記呼び出されたメソッドに関する第2の情報を選択的に格納するステップは、前記呼び出されたメソッドの実行のコストの指標を格納するステップを含む、ことを特徴とする請求項3に記載のプロセス。
【請求項5】
前記呼び出されたメソッドに関する第2の情報を選択的に格納するステップは、前記呼び出されたメソッドが実行されたことを示す指標を格納するステップを含む、ことを特徴とする請求項3に記載のプロセス。
【請求項6】
前記呼び出されたメソッドはリターン値を生成し、前記呼び出されたメソッドへの呼び出しを選択的に許可するステップは、前記リターン値に対するラッパーを選択的に生成するステップを含む、ことを特徴とする請求項1に記載のプロセス。
【請求項7】
前記呼び出されたメソッドへの呼び出しを受信するステップは、前記呼び出されたメソッドへの呼び出しを傍受するステップを含む、ことを特徴とする請求項1に記載のプロセス。
【請求項8】
オブジェクトのメソッドの安全性を検証するプロセスをコンピュータに実行させる符号化されたプログラムを有するコンピュータ可読媒体であって、前記コンピュータ可読媒体は、
第1のオブジェクト定義および第2のオブジェクト定義を含む第1のデータ構造と、
前記第1のオブジェクト定義からインスタンス化される第1のオブジェクト、前記第1のオブジェクトのメソッドを呼び出すことに応答して前記第2のオブジェクト定義からインスタンス化される第2のオブジェクト、および前記第2のオブジェクトがインスタンス化された動作状態の指標を格納するラッパーを含む、複数のオブジェクトと
を更に備え、
前記プロセスは、
前記第2のオブジェクト内の呼び出されたメソッドへの呼び出しを、前記コンピュータ上のインタフェースコンポーネントにより、受信することと、
前記呼び出されたメソッドへの呼び出しを許可すべきか否かを判定する処理を前記インタフェースコンポーネントにより実行することであって、当該処理は前記ラッパーにアクセスすることを含む、判定する処理を実行することと、
当該処理の結果に基づき、前記呼び出されたメソッドへの呼び出しを、前記インタフェースコンポーネントにより、選択的に許可することと
を含む、コンピュータ可読媒体。
【請求項9】
前記第1のオブジェクトは、複数のメソッドを含み、
前記コンピュータ可読媒体は、前記第1のオブジェクトのどのメソッドがセキュリティゾーンで動作可能であるかを識別する第2のデータ構造を更に含む、
ことを特徴とする請求項8に記載のコンピュータ可読媒体。
【請求項10】
前記第2のオブジェクトは、セキュリティゾーン内での動作に対する動作状態を有し、
前記第2のオブジェクトは、前記セキュリティゾーンでの動作状態において前記第2のオブジェクトにアクセスするためのインタフェースを有し、
前記ラッパーは、前記第2のオブジェクトに向けて前記インタフェースを通じて呼び出しを掛けるように適合化される、
ことを特徴とする請求項8に記載のコンピュータ可読媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2012−230724(P2012−230724A)
【公開日】平成24年11月22日(2012.11.22)
【国際特許分類】
【出願番号】特願2012−190363(P2012−190363)
【出願日】平成24年8月30日(2012.8.30)
【分割の表示】特願2008−553330(P2008−553330)の分割
【原出願日】平成19年1月30日(2007.1.30)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)