(57)【要約】【課題】オブジェクトに掛けられたメソッド呼び出しを傍受するように構成されたコンピュータシステム。【解決手段】メソッド呼び出しを傍受することにより、処理をメソッド呼び出し毎に逐次的に遂行することが可能となる。この処理の一部として、オブジェクトに対するメタデータが調べられ、そのオブジェクトに対するメソッドがサブセットに分割される。任意の特定のメソッド呼び出しに応答して遂行される処理は、そのメソッドが属するサブセットに基づく。メタデータのタイプは、コンピュータシステムの所望の動作に依存する。ホワイトリストまたはブラックリストを表すメタデータをコンピュータシステム内で用い、これによって、安全と判断されるメソッドへのアクセスは許可し、安全でないと判断されるメソッドへのアクセスは拒絶するセキュリティゾーンを実現することができる。【選択図】なし【特許請求の範囲】
【請求項１】
オブジェクトのメソッドの安全性を検証するプロセスであって、前記オブジェクトは複数のメソッドを有し、前記プロセスは、
前記メソッドと関連する情報を前記オブジェクトと、コンピュータが、関連付けるステップであって、前記情報は、第１のシナリオにおいて実行可能なメソッドのサブセットを識別する、関連付けるステップと、
前記オブジェクト内の呼び出されたメソッドへの呼び出しを、前記コンピュータ上のインタフェースコンポーネントにより、受信するステップと、
前記呼び出されたメソッドへの呼び出しを許可すべきか否かを判定する処理を、前記インタフェースコンポーネントにより、実行するステップであって、当該処理は、前記メソッドと関連する情報にアクセスすることを含む、処理を実行するステップと、
前記処理の結果に基づき、前記呼び出されたメソッドへの呼び出しを、前記インタフェースコンポーネントにより、選択的に許可するステップであって、前記呼び出されたメソッドへの呼び出しを選択的に許可するステップは、前記呼び出されたメソッドが前記サブセット内にあるか否かに基づいて前記呼び出されたメソッドの実行を開始するステップ、ならびに、前記呼び出されたメソッドが前記サブセット内にないか否かに基づいてエクセプションを生成するステップを含む、選択的に許可するステップと
を含む、ことを特徴とするプロセス。
【請求項２】
前記呼び出されたメソッドが前記サブセット内にあるか否かに基づいて前記呼び出されたメソッドの実行を開始するステップは、前記呼び出されたメソッドが前記サブセット内に存在しない場合に、前記呼び出されたメソッドの実行を開始するステップを含む、ことを特徴とする請求項１に記載のプロセス。
【請求項３】
前記呼び出されたメソッドへの呼び出しを選択的に許可するステップは、前記呼び出されたメソッドに関する第２の情報を選択的に格納するステップを含む、ことを特徴とする請求項１に記載のプロセス。
【請求項４】
前記呼び出されたメソッドに関する第２の情報を選択的に格納するステップは、前記呼び出されたメソッドの実行のコストの指標を格納するステップを含む、ことを特徴とする請求項３に記載のプロセス。
【請求項５】
前記呼び出されたメソッドに関する第２の情報を選択的に格納するステップは、前記呼び出されたメソッドが実行されたことを示す指標を格納するステップを含む、ことを特徴とする請求項３に記載のプロセス。
【請求項６】
前記呼び出されたメソッドはリターン値を生成し、前記呼び出されたメソッドへの呼び出しを選択的に許可するステップは、前記リターン値に対するラッパーを選択的に生成するステップを含む、ことを特徴とする請求項１に記載のプロセス。
【請求項７】
前記呼び出されたメソッドへの呼び出しを受信するステップは、前記呼び出されたメソッドへの呼び出しを傍受するステップを含む、ことを特徴とする請求項１に記載のプロセス。
【請求項８】
オブジェクトのメソッドの安全性を検証するプロセスをコンピュータに実行させる符号化されたプログラムを有するコンピュータ可読媒体であって、前記コンピュータ可読媒体は、
第１のオブジェクト定義および第２のオブジェクト定義を含む第１のデータ構造と、
前記第１のオブジェクト定義からインスタンス化される第１のオブジェクト、前記第１のオブジェクトのメソッドを呼び出すことに応答して前記第２のオブジェクト定義からインスタンス化される第２のオブジェクト、および前記第２のオブジェクトがインスタンス化された動作状態の指標を格納するラッパーを含む、複数のオブジェクトと
を更に備え、
前記プロセスは、
前記第２のオブジェクト内の呼び出されたメソッドへの呼び出しを、前記コンピュータ上のインタフェースコンポーネントにより、受信することと、
前記呼び出されたメソッドへの呼び出しを許可すべきか否かを判定する処理を前記インタフェースコンポーネントにより実行することであって、当該処理は前記ラッパーにアクセスすることを含む、判定する処理を実行することと、
当該処理の結果に基づき、前記呼び出されたメソッドへの呼び出しを、前記インタフェースコンポーネントにより、選択的に許可することと
を含む、コンピュータ可読媒体。
【請求項９】
前記第１のオブジェクトは、複数のメソッドを含み、
前記コンピュータ可読媒体は、前記第１のオブジェクトのどのメソッドがセキュリティゾーンで動作可能であるかを識別する第２のデータ構造を更に含む、
ことを特徴とする請求項８に記載のコンピュータ可読媒体。
【請求項１０】
前記第２のオブジェクトは、セキュリティゾーン内での動作に対する動作状態を有し、
前記第２のオブジェクトは、前記セキュリティゾーンでの動作状態において前記第２のオブジェクトにアクセスするためのインタフェースを有し、
前記ラッパーは、前記第２のオブジェクトに向けて前記インタフェースを通じて呼び出しを掛けるように適合化される、
ことを特徴とする請求項８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
多くのソフトウェアシステムにおいては、ある特定のオブジェクトへのアクセスは、それらオブジェクトが呼び出されるコンテキストに基づいて制限される。例えば、本件特許出願人により提供されるＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ（登録商標）なるウェブブラウザなどのようなウェブブラウザは、「セキュリティゾーン（ｓｅｃｕｒｉｔｙ  ｚｏｎｅ）」を実現するために、ある特定のオブジェクトへのアクセスを制限する。インターネットからダウンロードされたスクリプトは、このセキュリティゾーン内で実行することは許可されるが、しかし、これらスクリプトは、そのウェブブラウザがインストールされているコンピュータの動作を混乱させる恐れのあるオブジェクトへのアクセスは拒絶される。セキュリティゾーンを有することで、コンピュータユーザは、インターネットまたは他の信頼できないソースからのスクリプトをダウンロードすることを許されるが、同時に、このようなダウンロードされたスクリプトが、コンピュータ上で実行されたとき、それらが不注意で誤って書かれていたり、あるいは悪意にてコンピュータの動作を混乱させるような方法で書かれていたりして、コンピュータを損傷させる危険はあるが、それが低減される。
【０００２】
ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトは、それに向けられたアクセスが制限されるオブジェクトの１例である。スクリプトを実行するように構成されたコンピュータは、複数のＡｃｔｉｖｅＸ（登録商標）なるオブジェクトを含んでも良い。各ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトは、１つまたは複数のインタフェースを含む。各インタフェースは、そのインタフェースを通じて呼び出すことができるメソッド（ｍｅｔｈｏｄ）を含み、インタフェースによりスクリプトは、そのスクリプトの実行中に機能を遂行するため、これらメソッドを呼び出すことができる。このような機能には、コンピュータのディスプレイ上への情報の提供、電子メールを送信する目的での電子メールシステムへのアクセス、またはコンピュータのファイル管理システム内のファイルの変更が含まれる。
【０００３】
ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトにて遂行される幾つかの機能、例えば、コンピュータのディスプレイ上への出力の提供は通常は悪意によるものではない。このような悪意によらない機能を遂行するメソッドのみを公開するオブジェクトのセキュリティゾーンからの呼び出し（ｃａｌｌ）は許可される。しかし、他の機能、例えば、ファイル管理システムにアクセスする機能は、そのスクリプト内において誤って用いられ、あるいは悪意ある目的のため用いられるとコンピュータを損傷させることがある。セキュリティゾーンを実現する場合、このような有害な機能を遂行するメソッドを公開するオブジェクトへの呼び出しは許可されない。
【０００４】
ある特定のオブジェクトへのアクセスを、セキュリティゾーンから発動された場合、制限するためのメカニズムが提供されている。ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトに対して、このメカニズムは、ＩＯｂｊｅｃｔＳａｆｅｔｙと呼ばれるオプションとしての条件付きのインタフェースである。このインタフェースを実現するＡｃｔｉｖｅＸ「登録商標」なるオブジェクトは、スクリプトを実行するホストプログラムからのクエリに応答できる。このスクリプトはＡｃｔｉｖｅＸ（登録商標）が「安全モード（ｓａｆｅ  ｍｏｄｅ）」の動作を有し、安全モードでインスタンス化することができることを示している。いったん、安全モードでインスタンス化されると、呼び出しをそのオブジェクトに向けて、その任意のインタフェースを通じて掛けることができる。このＡｃｔｉｖｅＸ（登録商標）なるオブジェクトの責務は、安全モードにて実行しているときには、安全でないメソッドは呼び出されないことを保証することにある。この特徴により、ウェブブラウザが、セキュリティゾーンを、安全モードの動作をサポートするＡｃｔｉｖｅＸ（登録商標）なるオブジェクトのインスタンスを生成すること、および全てのこのようなオブジェクトを安全モードでインスタンス化することでのみで実現が可能になる。
【発明の概要】
【０００５】
コンピュータシステムに対するソフトウェアは、オブジェクトへのアクセスを制御するための改善されたプロセスを提供することで、よりパワフルにすることができ、より簡単に開発することができ、および、制限されることを意図するオブジェクトへのアクセスを与えてしまう可能性をより小さくできる。このプロセスは、このプロセスを遂行するために特別にオブジェクトを実装することは要求されず、このために、このプロセスの利用が簡単になり、現存するオブジェクトをこの改善されたプロセスに従うコンピュータシステムで用いることが可能になることが好ましい。
【０００６】
１つの形態においては、本発明はメソッド呼び出し（ｍｅｔｈｏｄ  ｃａｌｌ）を傍受することができ、このため、それが実行される前または後にメソッド呼び出しを処理することが可能になるソフトウェアシステムに関する。呼び出しは、インタフェースコンポーネントを提供することで傍受されるが、このインタフェースコンポーネントは、メソッド呼び出しを受信し、各々の呼び出しを処理した後に、その呼び出しを許可または拒絶する。この技術は、このセキュリティゾーンから掛けられた各々の呼び出しを処理することで、セキュリティゾーンを実現するために使用することができ、呼び出されているメソッドが実行に対して安全であるとみなされるか否かを判断できる。結果として、オブジェクトへのアクセスをメソッド呼び出し毎に逐次的（ｍｅｔｈｏｄ  ｃａｌｌ−ｂｙ−ｍｅｔｈｏｄ  ｃａｌｌ）にて制限することが可能になる。
【０００７】
もう１つの形態においては、本発明は、コンピュータシステムを、メソッド呼び出しを選択的に処理するために動作させることに関する。このプロセスは、コンピュータシステムにプログラムされているメソッドに関する格納された情報を用いる。あるメソッドが呼び出されると、この格納されている情報が、その呼び出しの処理で用いるためにアクセスされる。このプロセスは、その格納されている情報がどのメソッド呼び出しが拒絶または許可されるべきかを示すときは、セキュリティゾーンの実現の一部として用いられる。このプロセスは、更に他のコンテキスト内において適用することもでき、これには、選択されたメソッドの実行をロギングするため、またはあるプログラムの実行のコストに関する統計量を累積するためのシステムの一部として用いることが含まれる。
【０００８】
もう１つの形態においては、本発明は、特別な処理が要求されるゾーンから間接的にインスタンス化されたオブジェクトを識別するメカニズムを含むコンピュータ用ソフトウェアに関する。あるゾーンから間接的にインスタンス化されたオブジェクトを追跡するために、オブジェクトはそれと関連付けられたラッパーを有する。このラッパーは、そのオブジェクトが、そのゾーンから、直接的に、あるいは間接的に、インスタンス化されたか否かを示す情報を格納する。ラッパーは、オブジェクトが他のオブジェクトをインスタンス化するようなプロセス内で用いることができる。あるオブジェクトがもう１つのオブジェクトをインスタンス化するとき、各オブジェクトは先行するオブジェクトから値を継承するが、これはラッパー内に格納される。オブジェクトの連鎖が形成される場合、各オブジェクトはその連鎖内の最初のオブジェクトと同一の値を有する。その連鎖内のルートオブジェクトに、そのオブジェクトはそのゾーン内でインスタンス化されたことを示す値が与えられると、その連鎖内の個々のオブジェクトは、そのゾーンからインスタンス化されたそれらオブジェクトを識別して、同一の値を有することになる。これら格納された指標を、オブジェクトへのアクセスを制限するプロセスの一部として使用することで、セキュリティゾーンを実現するコード開発者に掛かる負担が、コード開発者は、間接的にインスタンス化された可能性のあるオブジェクトを識別する必要がないため、または、セキュリティゾーン内での実行に対して安全ではないと判断されるオブジェクトへのアクセスを制限する必要性はなくなるために軽減される。
【０００９】
上記説明は本発明の非制限的な要約であり、本発明は添付の請求項にて定義される。
【００１０】
添付図面は縮尺にて描かれることは意図されてない。図面において、さまざまな図内に示されている各々の同一もしくはほぼ同一のコンポーネントは類似する数字にて表されている。簡素化の目的で、全てのコンポーネントが全ての図面において参照数字を与えられてはいない。
【図面の簡単な説明】
【００１１】
【図１】従来技術によるコンピュータシステムの概略図である。
【図２】本発明の一実施形態に従うコンピュータシステムの動作を示す流れ図である。
【図３】本発明の一実施形態を組み込むコンピュータシステムのソフトウェアブロック図である。
【図４】本発明の一実施形態を組み込むコンピュータシステムの別の動作状態におけるソフトウェアブロック図である。
【発明を実施するための形態】
【００１２】
我々はセキュリティゾーンの実現は、オブジェクトへのアクセスを制御するプロセスが改善された場合、改善されるであろうということを認識した。オブジェクトが安全なインタフェースを実現する場合、オブジェクトをセキュリティゾーン内からのみインスタンス化することが知られているが、この予防措置さえも、そのセキュリティゾーンで実行しているスクリプトに、そのセキュリティゾーン内からインスタンス化されていないオブジェクトへアクセスが与えられた場合は十分ではない。この状態はあるオブジェクトがもう１つのオブジェクトを送り返すような場合に発生する。例えば、安全なインタフェースを実現する第１のオブジェクトは、そのオブジェクトメソッドの１つが呼び出されると、第２のオブジェクトをインスタンス化し、この第２のオブジェクトをそのスクリプトに送り返す。その第２のオブジェクトが「安全（ｓａｆｅ）」ではないと見なされる場合は、そのスクリプトは安全でないオブジェクトへのアクセスを間接的に得ることとなる。
【００１３】
この結果を回避するためには、各々のメソッドの安全性がメソッド呼び出し毎に逐次的（ｍｅｔｈｏｄ  ｃａｌｌ−ｂｙ−ｍｅｔｈｏｄ  ｃａｌｌ）にて検証される。ある呼び出しがなされると、その呼び出しは呼び出されているメソッドが安全であると判断された場合に限り続行を許される。以下により詳細に説明されるように、本発明の実施形態においては、このようなセキュリティゾーンは、メソッド呼び出しを傍受することで実現される。あるメソッド呼び出しがセキュリティゾーン内からなされた場合、その呼び出されたメソッドは、そのメソッドが安全であると判断されると続行を許されるが、そのメソッドが安全ではないと判断されたとアクセスはブロックされる。
【００１４】
更に、セキュリティゾーンで実行しているスクリプトから間接的にインスタンス化されたオブジェクトを識別するためのメカニズムが提供される。幾つかの実施例においては、このメカニズムは、オブジェクトに、それらがインスタンス化される際に、ある特性を割り当てることを含む。個々のオブジェクトがインスタンス化されるとき、これは、この特性を、それをインスタンス化したオブジェクトから継承することができる。セキュリティゾーンで直接的にインスタンス化されたオブジェクトに、この特性の認識可能な値を与えることで、結果として、そのセキュリティゾーンにおいて間接的にインスタンス化された任意のオブジェクトがこの値を継承することとなる。このようなメカニズムの具体的な例として、セキュリティゾーンで間接的にインスタント化されたオブジェクトに対してラッパーが提供される。このラッパーは、そのオブジェクトに対する特性を定義する情報を格納し、ここではそのオブジェクト定義に対するいかなる変更も要求されない。
【００１５】
図１にはコンピュータシステム１１０のブロック図が示されている。図１のブロック図は、大幅に簡略化されており、本発明の例示的実施形態との関連で説明されるオブジェクトへのアクセスを制御することと関連するコンピュータシステムの態様のみ示す。
【００１６】
コンピュータシステム１１０は、図１ではインターネット１２０へアクセスするように示されている。インターネット１２０を通じて、コンピュータシステム１１０は、サーバ１３０へアクセスする。コンピュータシステム１１０は、サーバ１３０から、情報をダウンロードするが、これにはスクリプトが含まれる。本明細書で使用する「スクリプト（ｓｃｒｉｐｔ）」なる用語は、１つまたは複数のコンピュータ実行可能命令の集合を指す。一般に、スクリプトは、コンピュータシステムに、単一の機能または一群の互いに密接する機能を遂行するために提供される比較的小さなプログラムである。しばしば、スクリプトはウェブページによって、そのウェブページにアクセスして来るクライアントコンピュータに対して、そのウェブページをアニメート化するため、または、ユーザに対してよりインタラクティブなエクスピアリアンスを生成するために提供される。しかしながら、本発明は、任意の特定なサイズ、機能または目的のスクリプトに制限されるものではない。更に、本発明はインターネットを通じてダウンロードされるスクリプトに制限されるものでもない。
【００１７】
コンピュータシステム１１０は、スクリプト１１４を実行するホスト１１２を含む。ここで、ホスト１１２は、従来の技術に従ってスクリプトを実行するために構成されるソフトウェアコンポーネントである。ホスト１１２は、しばしば、「インタプリタ（ｉｎｅｒｐｒｅｔｅｒ）」、「ジャスト・イン・タイムコンパイラ（ｊｕｓｔ  ｉｎ  ｔｉｍｅ  ｃｏｍｐｉｌｅｒ）」もしくは「仮想マシン（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）」と呼ばれるソフトウェアを含む。ホスト１１２は、スクリプトを実行することに加えて機能を遂行できる。インターネットからダウンロードされるスクリプトの例においては、ホスト１１２は、ウェブブラウザである。しかし、任意の適切なホストを用いることができる。
【００１８】
図示される実施形態においては、スクリプト１１４は、ホスト１１２によって、実行のために解釈されるコンピュータ実行可能命令を含む。スクリプト１１４の実行におけるステップは、コンピュータシステム１１０内のオブジェクトへのアクセスを含んでもよい。
【００１９】
本明細書に説明されるように、オブジェクトは、呼び出しがオブジェクトに対して掛けられた場合に実行されるメソッドを含む可能性のある、コンピュータソフトウェアコンポーネントである。オブジェクトは、従来のコンピュータシステムのように生成されてもよい。ここに説明される実施形態においては、オブジェクトの１つのインスタンスが、あるオブジェクトが、コード、例えば、スクリプト１１４の実行の際にインスタンス化された場合オブジェクト定義から生成される。図１の従来技術の例においては、いったんあるオブジェクトのインスタンスがコードの実行に対して利用可能になると、そのコードは、そのオブジェクトのメソッドに、そのオブジェクトに対して呼び出しを掛けることで、アクセスする。
【００２０】
オブジェクト定義は多数のメソッドの任意のもので提供できる。オブジェクト定義は、コンピュータシステム１１０のオペレーティングシステムの一部として提供することもできる。オブジェクト定義は、代替として、または追加的に、コンピュータシステム１１０上に、特別にスクリプト１１４が実行することを許可するためにロードすること、もしくは、ホスト１１２との関連で提供することができる。もう１つの例として、オブジェクト定義は、スクリプト１１２の実行とは無関係なアプリケーションプログラムの一部としてロードすることもできる。
【００２１】
ここでは、コンピュータシステム１１０内のオブジェクト定義の集合がオブジェクトライブラリ１１６として描かれている。オブジェクトライブラリ１１６は、ここでは、２つのオブジェクト定義１６２およびオブジェクト定義１６４を有するように示されている。しかしながら、オブジェクトライブラリ１１６は、より多数のオブジェクトに対する定義を含むこともできるが、ここでは簡素化のために、２つのオブジェクト定義のみが示されている。更に、図１は単一のオブジェクトライブラリ１１６を示す。本発明の実施においては、全てのオブジェクト定義が、単一のファイルまたは他の位置内に格納される必要はない。オブジェクトライブラリ１１６は、ホスト１１２内で実行するスクリプト１１４によるアクセスに対して利用可能なオブジェクトの集合の論理的表現とみなされる。
【００２２】
オブジェクトライブラリ１１６は、コンピュータ１１０上のスクリプトの実行において使用される多数の機能を遂行するオブジェクト定義を含む。オブジェクトライブラリ１１６内のオブジェクトにより遂行されるこれら機能は、システム資源１１８へのアクセスを含む。
【００２３】
システム資源１１８は、コンピュータシステム１１０のハードウェアまたは他のソフトウェアコンポーネントと対話するコンポーネントを含むことが可能である。例えば、システム資源１５２１は、ファイル管理システムを実装する。オブジェクトライブラリ１１６に定義されるオブジェクトは、このファイル管理システムに、情報を格納または取り出すためにアクセスする複数のメソッドを含む。他のシステム資源は他の機能を遂行する。例えば、システム資源１５２２またはシステム資源１５２３は、コンピュータシステム１１０の人であるユーザとの対話、もしくはメールの管理と関連する機能を遂行する。コンピュータシステムは、ここには簡素化のために、３つのシステム資源１５２１、１５２２、１５２３のみ示すが、多数のシステム資源を有することが可能である。
【００２４】
これらシステム資源の各々は、オブジェクトライブラリ１１６に、システム資源と関連する１つもしくは複数のオブジェクト定義を含んでよい。これらオブジェクト定義は、システム資源の機能にアクセスするために呼び出されるべきメソッドを含むことができる。
【００２５】
図１は、例示として、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトである、オブジェクトを示す。こうして、これらオブジェクトは、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトに対する従来の方法と同じようにインタフェースを実現するものとして示されている。しかしながら、任意の適切なオブジェクトのタイプおよび任意の適切なインタフェースの形態を用いることができる。
【００２６】
図１は、オブジェクトライブラリ１１６に、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトに対して定義された様々なインタフェースを実現するオブジェクト定義１６２およびオブジェクト定義１６４を示す。この例においては、各オブジェクト１６２およびオブジェクト１６４は、ＩＤｉｓｐａｔｃｈなるインタフェースおよびＩＵｎｋｎｏｗｎなるインタフェースを実現する。ＩＤｉｓｐａｔｃｈなるインタフェースを実現することで、スクリプト、例えばスクリプト１１４の命令を解釈するオブジェクトをホスト１１２から呼び出すことが可能になる。ＩＵｎｋｎｏｗｎなるインタフェースにより、ＣＯＭ標準に従ってコンパイルされたコードからオブジェクトにアクセスすることが可能になる。
【００２７】
オブジェクト１６２は、更に、ＩＯｂｊｅｃｔＳａｆｅｔｙとして識別されるインタフェースを実現する。このＩＯｂｊｅｃｔＳａｆｅｔｙなるインタフェースはオブジェクト１６２内に、オブジェクト１６２の開発者がこのオブジェクトに「安全モード（ｓａｆｅ  ｍｏｄｅ）」の動作を提供したために、実現される。安全モードの動作内で呼び出されるオブジェクトのどのようなメソッドも、セキュリティゾーンにおける実行に対して「安全（ｓａｆｅ）」であると判断される。この例においては、ファイルを変更したり、コンピュータから情報を不正に露出させたり、またはコンピュータシステムもしくはそのユーザに対して有害な動作を遂行することで、コンピュータシステム１１０の動作を混乱させるためにメソッドを使用することができなければ、そのメソッドは「安全（ｓａｆｅ）」であると判断される。しかしながら、安全モードは、適切であれば、どのような方法で実現しても良い。例えば、オブジェクトは、安全モードにて動作しているときは、これがシステム資源１１８にアクセスする任意のメソッドが呼び出される場合、ユーザ通知を生成するように実現することもできる。オブジェクトは、任意のそのようなメソッド呼び出しを、そのオブジェクトが、この通知に応答して、ユーザの許可を受信しない限り、実行しないようにすることもできる。
【００２８】
対照的に、オブジェクト１６４は、ＩＯｂｊｅｃｔＳａｆｅｔｙなるインタフェースを実装しない。オブジェクト１６２とオブジェクト１６４とのこの相違は、オブジェクトがホスト１１２内で実行しているスクリプト１１４のアクセス方法に影響を与え、これにより、ホスト１１２が「セキュリティゾーン（ｓｅｃｕｒｉｔｙ  ｚｏｎｅ）」を実現することが可能となる。図１の例においては、オブジェクト定義１６２からインスタンス化されたオブジェクトはセキュリティゾーンからアクセスされるが、オブジェクト定義１６４からインスタンス化されたオブジェクトはアクセスされない。
【００２９】
本明細書で用いる「セキュリティゾーン（ｓｅｃｕｒｉｔｙ  ｚｏｎｅ）」なる用語は、コンピュータシステム１１０内の他のソフトウェアコンポーネントへの制限されたアクセスを有することを意図されたコンピュータ実行可能命令の集合を表す。多くのインスタンスにおいて、セキュリティゾーンは、インターネットからダウンロードされるスクリプトに対して実現されるが、しかし、これは任意の信頼できないコードに対して実現することもでき、または、あるソフトウェアがコンピュータシステムの他のコンポーネントへ制限されたアクセスを有することを要求される任意の他の状況においても実現することができる。
【００３０】
スクリプト１１４は、オブジェクト１６２をインスタンス化するコンピュータ実行可能命令を含むことが可能である。このような命令を解釈すると、ホスト１１２は、オブジェクトライブラリ１１６にアクセスし、オブジェクト１６２のインスタンスを生成する。セキュリティゾーンから生成された場合、オブジェクト１６２のインスタンスは、「安全モード」で動作することとなる。その後は、このオブジェクト上の全ての呼び出しが、このオブジェクトのこのインスタンスを通じてなされる。こうして、セキュリティゾーンで実行するスクリプト１１４は、オブジェクト定義１６２の、セキュリティゾーンに対して安全であると判断されるメソッドへのアクセスを有する。
【００３１】
対照的に、オブジェクト定義１６４は、これはＩＯｂｊｅｃｔＳａｆｅｔｙなるインタフェースを含まないために、スクリプト１１４がこのオブジェクト定義からインスタンスを生成すべきという命令を含む場合でも、ホスト１１２によってインスタンス化されることはない。スクリプト１１４内の、オブジェクト１６４のインスタンスが形成されるべきことを指示するどの命令も、ホスト１１２がエクセプションを生成するようにさせる。このようなエクセプションに応答しての処理の結果、スクリプト１１４の実行は終端されるか、または他の適切なエラー修正ステップがされることとなる。しかしながら、オブジェクト１６４のいかなるインスタンスも生成されないために、オブジェクト１６４上のメソッドを呼び出しているスクリプト１１４内の命令は遂行されることはない。こうして、オブジェクト１６４の安全ではないと判断されたメソッドは、スクリプト１１４、またはセキュリティゾーン内から実行している他のプログラムにアクセスすることはできない。
【００３２】
図１は、更に、スクリプト１１４が、セキュリティゾーンにもかかわらず、それでも安全ではないと判断される機能を遂行できるオブジェクトへアクセスをどのようにして得るかについて示す。セキュリティゾーンは、スクリプト１１４がオブジェクト定義１６４から直接的にオブジェクトをインスタンス化することは阻止するが、このようなオブジェクトはオブジェクト１６２のメソッドからインスタンス化することができる。例えば、スクリプト１１４はオブジェクト１６２をインスタンス化することができるとすると、このオブジェクトはスクリプト１１４からアクセスすることができる。オブジェクト１６２に向けたメソッド呼び出しは、結果としてオブジェクト１６４をインスタンス化することができる。オブジェクト１６２上の呼び出されたメソッド呼び出しは、オブジェクト１６４のインスタンスをスクリプト１１４に送り返す。こうして、スクリプト１１４は、、たとえホスト１１２によって実装されているセキュリティゾーンがオブジェクト１６４への直接的なアクセスを禁止したとしても、オブジェクト１６４のインスタンスへのアクセスができる。スクリプト１１４は、次にオブジェクト１６４上のメソッドを呼び出し、このメソッドでシステム資源１１８にアクセスし、コンピュータシステム１１０の動作を偶発的にまたは故意に混乱させることもできる。
【００３３】
図２は本発明の実施形態に従うコンピュータシステムを動作するためのプロセスを示す。このプロセスは、スクリプトに対して、この間接的なインスタンス化を通じて、安全ではないと判断されたメソッドにアクセスさせることを回避する。図２のプロセスは、オブジェクトへのアクセス制御をメソッド呼び出し毎に逐次に提供することを可能にする。あるオブジェクトがセキュリティゾーンから、直接的にインスタンス化されたか、または間接的にインスタンス化されたかとは関係なく、そのオブジェクト上の安全ではないと判断されるメソッドに向けて呼び出しが掛けられた場合は、その呼び出しは、拒絶されるか、または安全ではないと判断されるメソッドへのアクセスが制限されるような他の方法で処理される。
【００３４】
図２のプロセスのステップは、コンピュータシステム内の１つまたは複数のソフトウェアコンポーネントによって遂行される。幾つかの実施形態においては、図２のプロセスは、ウェブブラウザ内の、スクリプトの命令を解釈するコンポーネントによって遂行される。
【００３５】
図２のプロセスは、スクリプトの命令を解釈するための従来のステップから開始する。ステップ２１０において、このプロセスは、オブジェクトをインスタンス化するための命令から開始する。このような命令はスクリプト内にエンコードされても良い。
【００３６】
そのプロセスは、判定ブロック２１２に進む。判定ブロック２１２において、そのオブジェクトがセキュリティゾーン内におけるインスタンス化に対して安全であるか否かに関する判定がなされる。この例においては、オブジェクトは、それが制限的インタフェース、例えば、ＩＯｂｊｅｃｔＳａｆｅｔｙで定義されている場合は、「安全」であると判断される。しかしながら、オブジェクトが安全であるか否かを決定するためには、適切であれば、どのような基準を採用しても良い。
【００３７】
そのオブジェクトが安全ではないと判断された場合は、このプロセスは終端ポイント２１４へと進む。終端ポイント２１４は、エクセプションを生成すること、エラーハンドラを実行すること、または、セキュリティゾーン内での実行に対して、安全ではないと判断されるオブジェクトをインスタンス化しようというスクリプトによる試みに応答して、他のステップを遂行することを伴う。セキュリティゾーン内での実行に対して安全ではないと判断されるオブジェクトをインスタンス化しようとする試みの処理は、従来のコンピュータシステムと同様であっても良いが、しかし、適切であれば、どのような処理を遂行しても良い。
【００３８】
逆に、オブジェクトが安全であると判断された場合は、処理はブロック２１６へと進む。ブロック２１６において、そのオブジェクトがインスタンス化される。オブジェクトのインスタンス化は、従来のコンピュータシステムと同様な方法で遂行されるが、しかし、適切であれば、オブジェクトをインスタンス化するためのどのようなメカニズムを用いても良い。従来のコンピュータシステムと同様に、セキュリティゾーンからのオブジェクトのインスタンス化には、そのオブジェクトが安全モードで実行しているということを記録することが含まれる。あるオブジェクトのあるインスタンスが安全モードで動作しているということの記録は、適切であれば、どのような方法でも達成することができるが、しかし、以下に説明される例においては、オブジェクトの各インスタンスは、メモリにアクセスし、ここでは「ＳａｆｅＭｏｄｅ（安全モード）」と呼ばれる、ブール変数の値を格納している。このＳａｆｅＭｏｄｅの値は、そのインスタンスが安全モードで実行するように生成されているときは真にセットされる。
【００３９】
ホストは、次に、スクリプト内の更なる命令を実行する。あるメソッドへの呼び出しが受信されると、処理はブロック２１８へと進む。幾つかの実施例においては、メソッドに向けられた呼び出しは、あるスクリプトを処理している際になされる全てのメソッド呼び出しを傍受するコンポーネントによって受信および処理される。スクリプトを解釈する従来のシステムと同様に、メソッド呼び出しを指定する命令は、ホスト内の、しばしばスクリプトエンジンと呼ばれるソフトウェアコンポーネントを呼び出すことで処理される。このスクリプトエンジンは、オブジェクトをフェッチし、そのオブジェクトへのインタフェースを取得する。
【００４０】
しばしば、ソフトウェアシステムの複数のオブジェクトへのインタフェースが、共通の処理ステップを遂行する共有コードで実現される。インタフェースを実現するためのこの共有コードは、ここでは「インボーカ（ｉｎｖｏｋｅｒ）」と呼ばれる。
【００４１】
従来技術によるコンピュータシステムにおいては、１つのインボーカは、１つもしくは複数のインタフェースを実現し、入力として、呼び出し命令を、そのインボーカによって実現されるインタフェースに対して適切なフォーマットで受信する。インボーカは、呼び出しを受信するが、これはあるメソッドを識別する引数と、そのメソッドを呼び出すときにパスされるべき引数とを含む。インボーカは、この入力情報の構文を解析し、所望のメソッドを遂行するためのコンピュータ実行可能コードがそこに格納されているコンピュータシステム１１０内の特定の位置を決定する。インボーカは、次に、このコードにアクセスし、結果を受信し、この結果をフォーマット化し、これをそのインボーカによって実現されるインタフェースを通じて呼び出しプログラムに送り返す。
【００４２】
図２に示される本発明の実施形態に従うインボーカは、従来技術によるシステム内のインボーカと同様のどのような機能も遂行するようにして良い。しかしながら、図２のプロセスにおいて用いられるインボーカは、処理を受信されたメソッド呼び出しに基づいて遂行するように構成しても良い。セキュリティゾーンが実現されている図２の例においては、メソッド呼び出しを処理することで、その呼び出しが許可されるべきか、拒絶されるべきか、または、別な形態に変更されるべきであるかが決定される。こうして、各メソッド呼び出しは、インボーカによって、条件付きで処理される。加えて、メソッド呼び出しが許可される場合は、インボーカは、あるメソッドに対する入力を、そのメソッドを呼び出す前に処理するか、または、そのメソッドによって生成された結果を、その結果を呼び出しプログラムに送り返される前に処理する。
【００４３】
図２のプロセスにおける残りのステップは、インボーカによって遂行される条件付の処理の例を与えている。判定ブロック２２０において、その呼び出しはセキュリティゾーンからなされたのか否かの判定がされる。幾つかの実施形態においては、メソッド呼び出しは、メソッド呼び出しが掛けられたオブジェクトが真にセットされたＳａｆｅＭｏｄｅ（安全モード）フィールドを有する場合は、セキュリティゾーンからされたものと判断される。上述のように、セキュリティゾーン内でインスタンス化されたすべてのオブジェクトは、直接的か間接的かのどちらかで、真にセットされたＳａｆｅＭｏｄｅフィールドを有する。しかしながら、呼び出しがセキュリティゾーンからなされたか否かの判定は、適切であれば、どのようなメソッドによっても行うことができる。
【００４４】
そのメソッド呼び出しはセキュリティゾーンからされてない場合は、処理は、ブロック２２２へと進む。ブロック２２２において、そのメソッドが、従来の処理を用いて呼び出しを掛けることを許可することで遂行される。ブロック２２４において、そのメソッドの遂行の結果が呼び出しプログラムに送り返され、このプロセスは終端する。結果は、従来の呼び出し処理と同様に、呼び出しプログラムに送り返すためにフォーマット化しても良い。
【００４５】
逆に、その呼び出しは、セキュリティゾーンからされている場合は、サブプロセス２２６が遂行されるが、ここでは、呼び出しは条件的に実行されるか、また別の方法で処理される。サブプロセス２２６は、ブロック２３０から開始する。ブロック２３０において、呼び出されたメソッドは、セキュリティゾーンで実行されることを許可されているか否か判定される。メソッドがセキュリティゾーンにおいて実行することを許可されているか否かを決定するためには、適切であれば、どのようなメカニズムを用いても良い。幾つかの実施形態においては、オブジェクトの開発者は、セキュリティゾーン内における実行に適するメソッドを、従来、オブジェクト全体がセキュリティゾーンからの実行に対して安全であるか否かを判断するために適用されてきたのと同一の基準を用いて識別する。しかしながら、ブロック２３０における決定は、オブジェクト全体に対してではなく、メソッド呼び出し毎になされる。
【００４６】
処理は次に判定ブロック２３２へと進む。判定ブロック２３２において、このプロセスは、その呼び出されたメソッドが実行に対して許可されているか否かに基づいて分岐する。その呼び出されたメソッドは許可されてない場合は、処理はエラー終端２３４へと進む。エラー終端２３４においては、適切であれば、どのような処理を遂行しても良い。例えば、エラー終端２３４における処理は、結果として、エクセプションを生成すること、エラーハンドラを実行すること、または他の適切な応答を生成することもできる。
【００４７】
逆に、その呼び出されたメソッドが、セキュリティゾーンで実行に対して許可されている場合は、処理はブロック２３５に進み、ここでそのメソッドに対する入力が、そのメソッドに対する呼び出しより前に処理される。これら入力に関しては、幾つかの実施形態においてはこれら入力に関する処理は遂行されないが、要求されるどのような処理を遂行しても良い。例えば、このような処理を、遂行監視アプリケーションの一部として、入力値を記録するために用いることもできる。
【００４８】
入力がブロック２３５において処理されるか否かに関係なく、処理は次にブロック２３６へと進む。ブロック２３６において、そのメソッドが遂行される。そのメソッドはブロック２３６において、そのメソッドがブロック２２２において遂行されたのと同一の方法にて遂行される。
【００４９】
しかしながら、ブロック２３６においてそのメソッドを遂行することで得られた結果は、更に処理される。この図示された実施形態において、判定ブロック２４０は、その結果はオブジェクトであるか否かを判断するためにその結果を更に処理する。様々なタイプの結果を処理するコンピュータシステムが知られており、このようなシステムは、結果のタイプに基づいて、異なる方法で結果を処理する。結果がオブジェクトであるか否かを識別するためには、従来の技術を採用することもできる。例えば、あるオブジェクトは、その結果がある特定のフォーマットのポインタであるか否か識別できる。
【００５０】
結果がオブジェクトであるか否かを識別するために具体的にどのようなメカニズムが用いられるかとは関係なく、その結果がオブジェクトではないときは、処理はブロック２４２へと進む。ブロック２４２において、結果は呼び出しプログラムに送り返される。ブロック２４２において、この結果は従来の方法で送り返される。従って、ブロック２４２における処理は、ブロック２２４において遂行される処理と同一である。
【００５１】
しかしながら、結果がオブジェクトである場合は、処理は、判定ブロック２４２からブロック２５０へと進行する。ブロック２５０において、呼び出されたメソッドを遂行した結果として生成されるそのオブジェクトに対してラッパーが生成される。ここで、「ラッパー（ｗｒａｐｐｅｒ）」なる用語は、ラップされたソフトウェアコンポーネントと、それが呼び出す外部コンポーネントとの間に挿入されたソフトウェアコンポーネントを表す。ラッパーは、外部コンポーネントに対して、そのラップされたコンポーネントと同一の形式にてインタフェースを提供する。このラッパーは、このラップされたコンポーネントに予め定義されたインタフェースを通じて順を追ってアクセスする。しかしながら、ラッパーは、外部コンポーネントからの呼び出しに関して処理を、ラップされたコンポーネント上に呼び出しを掛ける前に遂行することも、またはラップされたコンポーネントによって提供される結果を、それを外部コンポーネントに提供する前に処理することもできる。
【００５２】
この例において、ブロック２５０において生成されるこのラッパーは、そのオブジェクトが安全モードにおいて生成されたことの指標を記録する格納位置を含む。ブロック２５２において、このＳａｆｅＭｏｄｅフィールドが真にセットされる。
【００５３】
処理は次にブロック２５４に進む。ブロック２５４において、ラッパーが、その呼び出されたメソッドの遂行の結果として送り返される。呼び出されたメソッドの遂行の結果としてオブジェクトがインスタンス化されるが、呼び出しプログラムは、そのオブジェクトが直接にアクセスできるオブジェクトに関する情報を受信することはない。更に、呼び出しプログラムは、インスタンス化されたオブジェクトに対するラッパーに関する情報のみを受信する。結果として、そのオブジェクト上で行われるその後の全ての呼び出しは、ブロック２５０において生成されたこのラッパーを通じて行われる。
【００５４】
このインスタンス化されたオブジェクトは、これがセキュリティゾーン内で生成されたことを示す指標は含まないが、ラッパーがこのような指標を含む。結果として、そのオブジェクト内のメソッドに対するその後のどのような呼び出しも、安全モードサブプロセス２２６に従って処理されることとなる。ＳａｆｅＭｏｄｅ変数を格納するためにラッパーを生成することで、セキュリティゾーンにおける処理が要求されるという指標が、たとえそれらオブジェクトがセキュリティゾーンで間接的に生成されるとしても、あるオブジェクトから別のオブジェクトへと転送される。そのオブジェクトによってインスタンス化されるどのようなさらなるオブジェクトも、同様にセキュリティゾーンでの処理に対して生成されたものと示されることとなる。
【００５５】
図３に移り、ここには図２のプロセスを遂行可能なコンピュータシステムに対するソフトウェアアーキテクチャが示されている。図３はホスト３１２を示す。ホスト３１２は、例えば、インターネットからダウンロードされたスクリプト３１４が実行されるセキュリティゾーンを実現するウェブブラウザであり得る。このコンテキストにおいては、スクリプト３１４はオブジェクトへのアクセスを与えられるべきでない信頼できないコードを表わしているが、このオブジェクトは信頼できないコードによる実行に対して安全でないと判断されるものである。
【００５６】
しかしながら、代替の実施形態も可能である。例えば、ホスト３１２は、信頼できるコード、例えば、符号付きＣ＋＋コードを実行することもできる。この実施形態においては、メソッド呼び出しの処理は、信頼できるコードのみが、システム資源を操作するオブジェクトに、アクセスできるように遂行される。代替として、この実施形態における処理は、信頼できるコードが信頼できないコードには絶対にアクセスしないということで、遂行することもできる。
【００５７】
スクリプト３１４は、ここでは、ホスト３１２によって解釈される複数の命令を含むように示されている。図３に示される命令は、簡素化された形態であり、いかなる特定のプログラミング言語を表すことも意図されてない。スクリプト３１４は、説明される機能を遂行するために、適切であれば、どのような言語による命令を用いて実現することもできる。
【００５８】
命令３１６は、オブジェクトＡとして識別されるオブジェクトをインスタンス化するための命令である。命令３１６を実行すると、オブジェクトＡのインスタンス３６２が生成されることとなる。インスタンス３６２は、オブジェクト定義から従来のコンピュータシステムと同様な方法で生成することができる。この例においては、コンピュータ可読媒体が、オブジェクト定義を含むクラス３４０を格納している。図３には、オブジェクト定義３４２およびオブジェクト定義３４４が示されている。簡素化のために、これら２つのオブジェクト定義のみを示すが、コンピュータシステムは、各々が複数のオブジェクト定義を含む複数のクラスを含むことができる。
【００５９】
命令３１６が実行されると、ホスト３１２は、クラス３４０にアクセスし、オブジェクトＡのインスタンスを生成するために適切であるオブジェクト定義を取得する。命令３１６は、解説の目的で、簡素化されたシンタックスで書かれている。オブジェクトのインスタンス化を特定する実際の命令は、オブジェクトのインスタンスの生成において用いるための適切なオブジェクト定義を特定するための十分な情報を含み、図３に示されているより多くの情報が必要となる。この例においては、オブジェクト定義３４２を用いて、オブジェクトのインスタンスが生成されている。
【００６０】
オブジェクトのインスタンスが生成されると、このインスタンスはホスト３１２が生成したセキュリティゾーン内で実行している命令に応答して生成されたために、安全モードで動作するものとしてこのインスタンスはセットされる。この例においては、このインスタンス３６２内のＳａｆｅＭｏｄｅフィールド３７２が真にセットされる。
【００６１】
命令３１８は、インスタンス３１６において生成されたオブジェクトのインスタンス上の、ここではメソッド１（ｍｅｔｈｏｄ１）と呼ばれるメソッドを呼び出す命令である。ホスト３１２は、この命令３１８を、従来のシステムにおける呼び出し命令の処理と類似の方法にて処理する。従来のシステムにおいては、命令、例えば、命令３１８は、ＩＤｉｓｐａｔｃｈなるインタフェースを実現するコンポーネントを通じて処理される。こうして、図３は、ＩＤｉｓｐａｔｃｈインタフェースを実現するインボーカ３３０を示し、こうして、命令３１８が、最初に、インボーカ３３０にて、オブジェクトへのＩＤｉｓｐａｔｃｈなるインタフェースを通じてのアクセスの一部として処理される。
【００６２】
インボーカ３３０は、このインボーカが、命令３１８で識別されるメソッドへの呼び出しを、条件的に掛けるという点で従来のシステムにおけるインボーカとは異なる。実施形態において示されるインボーカ３３０は、呼び出し命令３１８を、メソッド１に向けて呼び出しを掛ける前に処理することで、その呼び出しが可能か否か判断する。
【００６３】
インボーカ３３０は、呼び出し命令３１８を処理することで、そのメソッドがＳａｆｅＭｏｄｅで実行に対して許可されているか否かを判断する。実施形態において示されるインボーカ３３０は呼び出されたメソッドが、その呼び出されたメソッドを含むオブジェクトに対するオブジェクト定義と関連するメタデータから、ＳａｆｅＭｏｄｅで実行することを許可されているか否かを判断する。図３に示される例においては、メタデータは、クラス３４０内に、ホワイトリスト３５０として格納されている。ホワイトリスト３５０は、ＳａｆｅＭｏｄｅにおける実行に対して許可されているクラス３４０内に定義されるメソッドのリストを含む。ホワイトリスト３５０上にメソッド１を見つけると、インボーカ３３０は、オブジェクトＡのインスタンス３６２に向けての呼び出しを許可して、メソッド１が遂行される。
【００６４】
図３は、クラス３４０に定義される全てのメソッドに関する情報を含むクラス３４０に対する単一のホワイトリスト３５０を示す。ホワイトリストは、各クラスに対して提供されても良い。しかしながら、あるホワイトリストは、そのソフトウェア階層の任意の適切なレベルと関連付けることもできる。例えば、複数のホワイトリストを、各クラスに対して、１つのホワイトリストが各オブジェクト定義に対応するように提供することができる。代替として、ホワイトリストはホスト３１２と関連させることも、または、コンピュータシステムの他のソフトウェアコンポーネントと関連させることもできる。更に、複数のホワイトリストおよび／またはメタデータを格納する複数のデータ構造を提供し、メソッド呼び出しに関する条件付き処理の一部として調べることもできる。
【００６５】
示される実施形態においては、オブジェクトＡは、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトであり、呼び出しは、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクト内の実行可能なコードに向けてインタフェースを通じて掛けられる。この例においては、この呼び出しは、ＩＤｉｓｐａｔｃｈなるインタフェースを通じて、従来のコンピュータシステムと同様に掛けられるが、しかし、他のインタフェース、例えば、ＩＵｎｋｎｏｗｎを通じて掛けることもできる。この例においては、オブジェクトが、ＩＤｉｓｐａｔｃｈなるインタフェースを通じて呼び出されると、インボーカ３３０は、呼び出しを傍受し、呼び出されたメソッドが実行に対して許可されている場合は、選択的に呼び出しが続行することを許可する。許可されている場合は、その呼び出しは、ＩＤｉｓｐａｔｃｈなるインタフェースを通じて、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトへの従来の呼び出しと同様な方法にて進行する。しかし、呼び出しが進行することを許可するために適切であればどのようなメソッドを用いても良い。
【００６６】
スクリプト３１４は、類似の方法で処理されるオブジェクトにアクセスする他の命令を含んでも良い。例えば、命令３２０はオブジェクトＢをインスタンス化する命令であり、命令３２２はオブジェクトＢ上のメソッドを呼び出す命令である。命令３２０が実行されると、ホスト３１２は、オブジェクトＢのインスタンス３６４を、オブジェクトＡのインスタンス３６２が、命令３１６に応答して生成されたのと同様の方法で生成する。この例においては、クラス３４０内のオブジェクト定義３４４を用いて、インスタンス３６４が生成される。インスタンス３６４も、インスタンス３６２と同様に、真にセットされたＳａｆｅＭｏｄｅ変数を含み、こうして、インスタンス３６４はセキュリティゾーン内から実行された命令に応答して生成されたことを示す。この例においては、インスタンス３６４は、更に、メソッド２に対するエントリも含むが、これはインスタンス３６４を生成するために用いられるオブジェクト定義３４４の一部として定義される。
【００６７】
命令３２２が実行されると、呼び出しがメソッド２に対して、命令３１８の実行に応答して呼び出しがメソッド１に対して行われるのとほとんど同一の方法で行われる。メソッド１もメソッド２も両方ともホワイトリスト３５０上に含まれるために、これら呼び出しは両方とも許可される。しかしながら、オブジェクトＡおよびオブジェクトＢは、各々、ホワイトリスト３５０上には載ってないメソッドを含む。ホスト３１２内で実行される任意のコードからこのようなメソッドを呼び出す試みがなされると、結果として、そのメソッドへの呼び出しは拒絶されることとなる。
【００６８】
例えば、オブジェクトＢは、メソッド３に対するエントリ３８６を含むよう示されている。図３に示される実施形態においては、メソッド３は、ホワイトリスト３５０上には含まれない。従って、メソッド３に向けられどのような呼び出しも拒絶される。図２との関連で上記したように、許可されてないメソッドに向けられた呼び出しは任意の方法にて処理される。
【００６９】
図４は本発明に従うコンピュータシステムの代替の実施形態を示す。図４はホスト４１２を示すが、これはホスト３１２（図３）と同一の方法で実現される。ホスト４１２は、スクリプト４１４を実行するが、これは、インボーカ４３０によって処理されるメソッド呼び出しを含む。インボーカ４３０は、同様にインボーカ３３０と同一の形態であり得る。
【００７０】
スクリプト４１４は、図３におけるスクリプト３１４と同様に、オブジェクトＡをインスタンス化する命令４１６を含む。この命令に応答して、オブジェクトＡのインスタンス４６２が、クラス４４０内のオブジェクト定義４４２から生成される。命令４１６は、セキュリティゾーン内から実行されるために、インスタンス４６２は真にセットされているＳａｆｅＭｏｄｅ変数４７２を含む。
【００７１】
命令４１８は、実行されると、オブジェクトＡ内のメソッド１を呼び出す。命令４１８の処理において、インボーカ４３０は、メソッド１はホスト４１２に実装されているセキュリティゾーンでの実行に対して許可されているか否か判断する。図４の実施形態においては、クラス４４０は、実行に対して許可されているメソッドを識別するメタデータを含む。この例においては、このメタデータは、ブラックリスト４５０である。ブラックリスト４５０は、ＳａｆｅＭｏｄｅで実行が許可されないメソッドのリストを含む。この例においては、メソッド１はブラックリスト４５０には含まれていない。従って、命令４１８が実行される場合、インボーカ４３０により、メソッド１に向けられた呼び出しは続行できる。
【００７２】
図４に示されるシナリオにおいては、オブジェクトＡ内のメソッド１にメソッド呼び出しが掛けられると、間接的にオブジェクトＢがインスタンス化される。この例においては、メソッド１はエントリ４７４を有するよう示される。エントリ４７４に続いて、オブジェクトＢが命令４７６によってインスタンス化される。命令４７６が実行されると、結果として、オブジェクトＢのインスタンス４６４が生成される。オブジェクトＢのインスタンス４６４は、従来の方法で生成することも可能である。
【００７３】
メソッド１における命令４７６の実行に応答してインスタンス４６４が生成された後、命令４７８のところで、メソッド１の実行の結果として、オブジェクトＢが送り返される。オブジェクトＢは、実施形態において示されるように、ポインタによって表される。しかしながら、オブジェクトを表すためには、適切であれば、どのようなデータ構造も用いることができる。メソッド１の実行に続いてオブジェクトを送り返すためには、命令４７８は、オブジェクトＢに対するポインタを送り返す。
【００７４】
インボーカ４３０は各々の結果を処理し、その結果を送り返すことが、スクリプト４１４に対して、安全でないコード、またはそのソフトウェアシステムの他の制限されている部分へのアクセスを与える、もしくは与える恐れがあるか否かを判断する。図４の例においては、オブジェクトＢは、安全ではないと見られる動作を遂行するメソッドを含む。インボーカ４３０内における処理においては、オブジェクトＢの各々のメソッドを分析することで、これらメソッドのいずれかが「安全でない（ｕｎｓａｆｅ）」か、否か判断される。しかしながら、送り返されるオブジェクトは安全ではないメソッドを含む可能性があるために、送り返されるどのようなオブジェクトも「安全ではない」と判断される。類似する処理を、安全ではないアレイ、または他のタイプの変数に関して遂行することもできる。
【００７５】
安全でない結果を生成するリターン変数を識別するために、インボーカ４３０が使用する具体的なメカニズムが用いられるかとは無関係に、インボーカ４３０は、更に、スクリプト４１４が、その結果への、直接的、無防備のアクセスを絶対にしないための手段も講じる。説明の実施形態においては、ラッパーを用いることで、安全ではないと見なされ送り返された変数へのアクセスが制御される。
【００７６】
インスタンス４６４は、安全ではないと判断されるために、インボーカ４３０はインスタンス４６４に対してラッパー４８０を生成する。ラッパー４８０は、オブジェクトＢへインタフェースを提供する一群のコンピュータ実行可能命令を表す。ラッパー４８０は、ラッパー４８０がＳａｆｅＭｏｄｅで生成されたことを示すビットを格納するためのフィールド４８２を含む。フィールド４８２は、ラッパー４８０が生成されたとき、真にセットされる。インボーカ４３０は、次に、オブジェクトＢを送り返すのではなく、ラッパー４８０を呼び出しプログラムに送り返す。
【００７７】
スクリプト４１４内の命令４１８の実行に続いて、スクリプト４１４は、オブジェクトＢにアクセスするために必要な情報を有する。従って、命令４２０が実行を終えると、これによってオブジェクトＢ内のメソッド２が呼び出されるのであるが、インボーカ４３０は、メソッド２への呼び出しを処理する。しかしながら、図に示される実施形態においては、オブジェクトＢへのアクセスはラッパー４８０を通じて行われる。
【００７８】
図４に示されるように、ラッパー４８０は、オブジェクトＢに向けてメソッド呼び出しが掛けられたことに応答して、インボーカ４３０がこれを通じてアクセスされるインタフェースを提供する。このラッパー４８０が与えるインタフェースは、セキュリティゾーン内でインスタンス化された他のオブジェクトが与えるインタフェースと同一の形態である。こうして、呼び出しが、ラッパー４８０を通じてオブジェクトＢに向けて掛けられると、インボーカ４３０は、これら呼び出しを、これが他のオブジェクトに向けて掛けられたメソッド呼び出しを処理するのと同一の方法にて処理する。呼び出しをオブジェクトＢに向けてラッパー４８０を通じて掛けることで、その呼び出しがセキュリティゾーン内において許可されているか否かのチェックを行うことが可能になる。この例においては、ラッパー４８０は、真にセットされたＳａｆｅＭｏｄｅ変数４８２を有し、これはインボーカ４３０に対して、ラッパー４８０を通じてなされる任意のメソッド呼び出しが制限されているか否かをチェックするように指令する。こうして、ラッパー４８０を通じての呼び出しは、必要に応じて安全モードの実行に対して処理される。オブジェクトＢ内の呼び出されたメソッドが、セキュリティゾーン内のアクセスに対して許可されている場合は、インボーカ４３０は、このような呼び出しの処理を終えると、オブジェクトＢ内のその呼び出されたメソッドを遂行するコードにアクセスする。図４の例においては、メソッド２はブラックリスト４５０上にリストされている。従って、インボーカ４３０が命令４２０を処理するときに、これはそのメソッド２に向けられた呼び出しを拒絶する。あるメソッド呼び出しを拒絶した時点で、任意の適切な応答が行われるが、これにはエクセプションの生成や、エラーハンドラの実行が含まれる。
【００７９】
図示される例においては、オブジェクトＢは間接的にインスタンス化されたのではあるが、図４の実施形態によって遂行されるメソッド呼び出し毎の逐次的許可方式のために、メソッド２は、これはセキュリティゾーンでの実行に対して許可されてないために、実行することを阻止される。こうして、アクセス制御がセキュリティゾーンにおいて間接的にインスタンス化されたオブジェクトに対してさえも実現される。
【００８０】
更に、オブジェクトに対して、インボーカ４３０でインタフェースを実現することを要求する以外は、図４の実施形態に示されるメソッド呼び出し毎の逐次的呼び出しアクセス制御を提供するために、オブジェクトＢの定義を生成するための、特別なコーディングは要求されない。ホワイトリスト３５０、ブラックリスト４５０または他のメタデータへのアクセスは、インボーカ内において、個々のオブジェクトのいかなる追加のコーディングもなしに行われる。スクリプト４１４から実行されるオブジェクトを特別にコーディングする必要を回避することにより、スクリプトが実行されるコンピュータシステム内において用いるオブジェクトを生成する開発者に掛かる負担が軽減される。更に、コンピュータシステム、例えば、コンピュータシステム１１０（図１）は、スクリプト４１４を実行するホスト４１２に加えて、多くのタイプのプログラムによってアクセスされるオブジェクトを含んでも良い。メソッド呼び出し毎に逐次的にアクセス制御を実現するための開発者に掛かる負担が軽減されるために、ホスト４１２内で実行しているスクリプトが、他のプログラムによってコンピュータシステムにインストールされるオブジェクトを利用できる機会が増大される。
【００８１】
こうして、本発明の少なくとも１つの実施形態の幾つかの態様が説明されたが、当業者においては、様々な代替、修正、および改善が容易に考えられることを理解されるべきである。
【００８２】
例えば、本発明は、セキュリティゾーンを実現するウェブブラウザとして説明することもできる。このような実施形態においては、各メソッド呼び出しは、それが実行するのに安全であるか判断するために処理される。しかしながら、説明されたメソッド呼び出しを傍受および処理するためのアプローチは、他のコンテキスト内において適用することもできる。例えば、スクリプトを実行するあらゆるプログラムは、メソッド呼び出しに関して処理を遂行するために、メソッド呼び出しを傍受するように動作するこができる。１つの例として、プログラムロギングメソッド呼び出しでメソッド呼び出しを傍受するようにしても良い。もう１つの例として、メソッド呼び出しを傍受するプログラムで、あるプログラムの実行のコストを計算するようにすることも、または他の方法よりメソッド呼び出しを処理するようにすることもできる。更に、メソッド呼び出しを、ホワイトリスト、ブラックリストまたは他の適切な手段に従って選択的に処理することもできる。
【００８３】
更に、本発明は、スクリプトの処理に制限されるものではない。本発明は、オブジェクトへの選択的なアクセスが要望されるあらゆるコンテキスト内において採用することができる。
【００８４】
更に、制限されたインタフェースを実現するオブジェクトは、ＩＯｂｊｅｃｔＳａｆｅｔｙとして知られるインタフェースを実現するものとして説明された。このインタフェースは、ＡｃｔｉｖｅＸ（登録商標）なるオブジェクトが使用される場合に適用可能な例としての役割を果たす。セキュリティインタフェースは、任意の適切な方法で実現することができる。一例として、あるオブジェクトに向けて、呼び出しがセキュリティゾーン内で動作しているか否かに関係なく呼び出しを掛けるために単一のインタフェースを提供するが、このインタフェースは動作モードを識別するためにセットされるパラメータを含むようにすることもできる。
【００８５】
更に、インボーカ４３０は、ＩＤｉｓｐａｔｃｈなるインタフェースを通じて行われる全ての呼び出しを傍受するものとして説明された。インボーカ４３０は、追加の、または他のインタフェースを通じて行われる呼び出しを傍受することもできる。例えば、インボーカ４３０は、呼び出しを、ＩＵｎｋｎｏｗｎまたはＩＤｉｓｐａｔｃｈＥｘなるインタフェースまたは任意の他の適切なインタフェースを通じて傍受することもできる。
【００８６】
更に、ラッパーは、メソッド呼び出しがオブジェクトを送り返えした場合に生成されるものとして説明された。他のリターン変数も同様にしてセキュリティに係わる事項を生み出し、ラッパー内に入れて送り返すこともできる。例えば、無防備のオブジェクトを、アレイ内のエントリとして送り返すこともできる。インボーカ３３０またはインボーカ４３０は、例えば、メソッド呼び出しの結果として送り返されるアレイ内の各エントリを分析することもできる。無防備のオブジェクトを含むどのようなエントリも、それらオブジェクトに対するラッパーと置換することもできる。代替として、インボーカは、単に、アレイを含むどのようなリターン値も不許可とすることもできる。
【００８７】
同様にして、あるメソッドは、呼び出しプログラムが無防備のオブジェクトまたは他の安全でないコードにアクセスすることを許可するように、入力変数を修正することもできる。インボーカ３３０またはインボーカ４４０は、入力変数を走査し、無防備のオブジェクトへのアクセスを許可するように修正されているアレイを含む入力変数を識別することもできる。そのような入力変数を有する呼び出しは拒絶するか、または安全でないオブジェクトにアクセスを提供することを回避するように処理することもできる。
【００８８】
このような代替、修正および改善はこの開示の一部分であると意図され、本発明の精神および範囲内であるものと意図される。従って、上述の説明および図面は単に例示に過ぎない。
【００８９】
更に、本発明の上述の実施形態は、多数の方法のいずれで実現することもできる。例えば、これら実施形態を実現には、ハードウェア、ソフトウェアを用いることも、またはこれら組み合わせを用いることもできる。ソフトウェアで実現された場合には、そのソフトウェアコードは、単一のコンピュータ内に提供されるか、複数のコンピュータ間に分散して提供されるのかに関係なく、任意の適切なプロセッサまたはプロセッサの集合上で実行することができる。
【００９０】
更に、本明細書で概説された様々なメソッドまたはプロセスは、多様なオペレーティングシステムもしくはプラットホームの任意の１つを採用する１つもしくは複数のプロセッサ上で実行可能なソフトウェアとしてコード化することもできる。加えて、このようなソフトウェアは、複数の適切なプログラミング言語および／もしくは従来のプログラミングまたはスクリプティングツールのいずれを用いて書くこともでき、そして更に、フレームワークもしくは仮想マシーン上で実行される実行可能なマシーン言語コードもしくは中間コードとしてコンパイルしても良い。
【００９１】
これとの関連で、本発明は、１つもしくは複数のコンピュータまたは他のプロセッサ上で実行されると、上述の本発明の様々な実施形態を実現するメソッドを遂行する１つもしくは複数のプログラムをエンコードされた１つのコンピュータ可読媒体（もしくは複数のコンピュータ可読媒体（例えば、コンピュータメモリ、１つもしくは複数のフロッピディスク、コンパクトディスク、光ディスク、磁気テープ等）として具現しても良い。これら複数のコンピュータ可読１つまたは複数媒体は、移送可能であり、これらの上に格納された１つもしくは複数のプログラムは、上述の本発明の様々な態様を実現するために、１つもしくは複数の異なるコンピュータもしくは他のプロセッサ上にロードしても良い。
【００９２】
本明細書で用いられる「プログラム（ｐｒｏｇｒａｍ）」または「ソフトウェア（ｓｏｆｔｗａｒｅ）」なる用語は、一般的な意味において、コンピュータもしくは他のプロセッサを、上述の本発明の様々な態様を実現する目的でプログラムするために採用することができる、任意のタイプのコンピュータコードもしくはコンピュータ実行可能命令のセットを指す。加えて、この実施形態の１つの態様に従うと、実行される本発明のメソッドを遂行する１つもしくは複数のコンピュータプログラムは、単一のコンピュータまたはプロセッサ上に存在する必要はなく、本発明の様々な特徴を実現するために複数の異なるコンピュータまたはプロセッサ間にモジュール形式にて分散させても良いことを理解されるべきである。
【００９３】
コンピュータ実行可能命令は、多くの形態、例えば、１つもしくは複数のコンピュータまたは他のデバイスにて実行されるプログラムモジュールで可能である。一般に、プログラムモジュールは、特定のタスクを遂行し、または特定のアブストラクトデータタイプを実現する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。典型的には、このプログラムモジュールの機能が、様々な実施形態において要求されるように、結合また分散される。
【００９４】
本発明の様々な特徴は、単独で用いることも、組み合わせて用いることも、または上述の実施形態においては具体的に説明されなかった多様な配置によって用いることができ、従って、この適用は、上述の説明において明示されている、または図面に示されている、コンポーネントの詳細および配置に制限されるものではない。例えば、一実施形態において説明されるさまざまな態様は、他の実施形態において説明されている複数の態様と、任意の方法で組み合わせても良い。
【００９５】
クレーム内におけるクレーム要素を修飾するための「第１の（ｆｉｒｓｔ）」、「第２の（ｓｅｃｏｎｄ）」、「第３の（ｔｈｉｒｄ）」などの順序を示す用語の使用は、これ自体、任意の優先性、先行性、クレーム要素の別のクレーム要素に対する順番、またはメソッドの動作が遂行される時間的順序を示すものではなく、これらは単に、クレーム要素を区別する目的で、ある名称を有する１つのクレーム要素を、（順序を示す用語の使用を除いては）同一の名称を有するもう１つの要素と区別するためのラベルとして用いられている。
【００９６】
更に、本明細書で用いられている語法および用語は、説明を目的とするものであり、制限的なものとして見なされるべきではない。「ｉｎｃｌｕｄｉｎｇ（含む）」、「ｃｏｍｐｒｉｓｉｎｇ（含む）」、または「ｈａｖｉｎｇ（有する）」、「ｃｏｎｔａｉｎｉｎｇ（含む）」、「ｉｎｖｏｌｖｉｎｇ（伴う）」およびこれらのバリエーションの使用は、本明細書では、その後にリストされている項目およびこれらの同等物並びに追加の項目を包含することを意味する。
【図１】
2012230724.tif 000002
【図２】
2012230724.tif 000003
【図３】
2012230724.tif 000004
【図４】
2012230724.tif 000005