(57)【特許請求の範囲】
【請求項１】
ポリシーコンパイラが、処理論理機構によって、少なくとも１つの書換えテンプレート、少なくとも１つの編集オートマトンポリシー、及び少なくとも１つのポリシーテンプレートを使用して、ウェブコンテンツに関する１つ又は複数のセキュリティポリシーを構築するステップであって、前記書換えテンプレートのインスタンスを受信するとともに、前記ポリシーテンプレートのインスタンスが編集オートマトンポリシーに変換され、前記各編集オートマトンポリシーが、書換えテンプレートインスタンス、遷移関数、置換アクション及び状態を生成することにより、前記１つ又は複数のセキュリティポリシーを構築するステップと、
インスツルメンテーションプロキシが、処理論理機構によって、スクリプトプログラムの実行結果として生じる挙動を前記１つ又は複数のセキュリティポリシーに準拠させるように、前記１つ又は複数のセキュリティポリシーに基づいて文書中の前記スクリプトプログラムの少なくとも一部を書き換えることにより文書中の前記スクリプトプログラムを新たなスクリプトプログラムに書き換えるステップと、
を含む方法。
【請求項２】
前記少なくとも１つの書換えテンプレートが、どの構文構成を監視し、それをどのように書き換えるかを指定するように定義される請求項１に記載の方法。
【請求項３】
前記少なくとも１つの書換えテンプレートの少なくとも１つの前記インスタンスが、当該１つの書換えテンプレートを、当該１つの書換えテンプレートに関連する特定のパラメータでインスタンス化することによって得られる請求項２に記載の方法。
【請求項４】
１つ又は複数のｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ（ＸＭＬ）ファイルが、前記少なくとも１つの編集オートマトンポリシーを記述する請求項１に記載の方法。
【請求項５】
前記１つ又は複数のセキュリティポリシーの構築が、高位スクリプトのインスツルメンテーションに関する組込みポリシーをさらに使用し、
前記高位スクリプトは、実行された時に別のＪａｖａＳｃｒｉｐｔ（登録商標）コード又はＨＴＭＬ文書ピースを生成するスクリプトである請求項１に記載の方法。
【請求項６】
前記文書中のスクリプトプログラムが、動的に生成されたＪａｖａＳｃｒｉｐｔ（登録商標）である自己修正コードを含む請求項１に記載の方法。
【請求項７】
前記文書中のスクリプトプログラムを新たなスクリプトプログラムに書き換える前記ステップは、実行時チェックを前記スクリプトプログラムに挿入することを含む請求項１に記載の方法。
【請求項８】
前記実行時チェックが、セキュリティチェック及びユーザ警告からなるグループを１つ又は複数含んでいる請求項７に記載の方法。
【請求項９】
前記文書中のスクリプトプログラムを新たなスクリプトプログラムに書き換える前記ステップは、実行時チェックの実行中にポリシーモジュールによってアクションをリダイレクトするためのコードを追加することを含む請求項１に記載の方法。
【請求項１０】
前記ポリシーモジュールは、前記文書中のスクリプトプログラム中のアクションを実行時のアクションを実行するための置換アクションに置換して、前記置換アクションを実施する請求項９に記載の方法。
【請求項１１】
前記文書をインスツルメントする際に前記文書中のスクリプトプログラムを新たなスクリプトプログラムに書き換えるステップが実行され、
書き換え後のスクリプトプログラムがインスツルメント後の前記文書の一部である請求項１に記載の方法。
【請求項１２】
少なくとも１つの前記セキュリティポリシーが、前記文書中のスクリプトプログラム内の第１アクションシーケンスを、当該第１アクションシーケンスとは異なる第２アクションシーケンスに変換する請求項１に記載の方法。
【請求項１３】
前記文書がＨＴＭＬ文書である請求項１に記載の方法。
【請求項１４】
前記スクリプトプログラムが、ＪａｖａＳｃｒｉｐｔプログラム、Ｆｌａｓｈプログラム及びＡｃｔｉｏｎＳｃｒｉｐｔプログラムからなるグループの１つである請求項１に記載の方法。
【請求項１５】
前記文書が、ブラウザにとってダウンロード可能な文書である請求項１に記載の方法。
【請求項１６】
前記ブラウザが、モバイル装置用のブラウザである請求項１５に記載の方法。
【請求項１７】
コンピュータに、
ポリシーコンパイラが、少なくとも１つの書換えテンプレート、少なくとも１つの編集オートマトンポリシー、及び少なくとも１つのポリシーテンプレートを使用して、ウェブコンテンツに関する１つ又は複数のセキュリティポリシーを構築するステップであって、前記ポリシーテンプレートのインスタンスが編集オートマトンポリシーに変換され、前記各編集オートマトンポリシーが、書換えテンプレートインスタンス、遷移関数、置換アクション及び状態を生成する、前記１つ又は複数のセキュリティポリシーを構築するステップと、
インスツルメンテーションプロキシが、スクリプトプログラムの実行結果として生じる挙動を前記１つ又は複数のセキュリティポリシーに準拠させるように、文書中の前記スクリプトプログラムを新たなスクリプトプログラムに書き換えるテップと、
を実行させるためのプログラム、を記録したコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記少なくとも１つの書換えテンプレートが、どの構文構成を監視し、それをどのように書き換えるかを指定するように定義される請求項１７に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記少なくとも１つの書換えテンプレートの少なくとも１つの前記インスタンスが、当該１つの書換えテンプレートを、当該１つの書換えテンプレートに関連する特定のパラメータでインスタンス化することによって得られる請求項１８に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
１つ又は複数のｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ（ＸＭＬ）ファイルが、前記少なくとも１つの編集オートマトンポリシーを記述する請求項１８に記載のコンピュータ読み取り可能な記録媒体。
【請求項２１】
前記１つ又は複数のセキュリティポリシーの構築が、高位スクリプトのインスツルメンテーションに関する組込みポリシーをさらに使用し、
前記高位スクリプトは、実行された時に別のＪａｖａＳｃｒｉｐｔコード又はＨＴＭＬ文書ピースを生成するスクリプトである請求項１８に記載のコンピュータ読み取り可能な記録媒体。
【請求項２２】
前記スクリプトプログラムが、動的に生成されたＪａｖａＳｃｒｉｐｔである自己修正コードを含む請求項１７に記載のコンピュータ読み取り可能な記録媒体。
【請求項２３】
ウェブコンテンツをインスツルメントするシステムであって、
処理論理機構によって、少なくとも１つの書換えテンプレート、少なくとも１つの編集オートマトンポリシー、及び少なくとも１つのポリシーテンプレートを使用して、ウェブコンテンツに関する１つ又は複数のセキュリティポリシーを構築するポリシーコンパイラであって、前記ポリシーテンプレートのインスタンスが編集オートマトンポリシーに変換され、前記各編集オートマトンポリシーが書換えテンプレートインスタンス、遷移関数、置換アクション及び状態を生成する、前記１つ又は複数のセキュリティポリシーを構築する、前記ポリシーコンパイラと、
１つ又は複数の書換え規則及びセキュリティモジュールを受信し、前記書換え規則及び前記セキュリティモジュールを使用して、処理論理機構によって、スクリプトプログラムの実行結果として生じる挙動を前記１つ又は複数のセキュリティポリシーに準拠させるように、文書中の前記スクリプトプログラムを新たなスクリプトプログラムに書き換えるインスツルメンテーションプロキシと、
を備えるシステム。
【請求項２４】
前記インスツルメンテーションプロキシが、ブラウザとは別のプロキシシステムに配置される請求項２３に記載のシステム。
【請求項２５】
前記文書が、前記ブラウザからの要求に応答してネットワーク環境からダウンロードされ、前記インスツルメンテーションプロキシから前記ブラウザに供給される請求項２４に記載のシステム。
【請求項２６】
前記少なくとも１つの書換えテンプレートが、どの構文構成を監視し、それをどのように書き換えるかを指定するように定義される請求項２３に記載のシステム。
【請求項２７】
前記少なくとも１つの書換えテンプレートの少なくとも１つの前記インスタンスが、当該１つの書換えテンプレートを、当該１つの書換えテンプレートに関連する特定のパラメータでインスタンス化することによって得られる請求項２６に記載のシステム。
【請求項２８】
１つ又は複数のｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ（ＸＭＬ）ファイルが、前記少なくとも１つの編集オートマトンポリシーを記述する請求項２３に記載のシステム。
【請求項２９】
前記ポリシーコンパイラが、高位スクリプトのインスツルメンテーションに関する前記１つ又は複数のセキュリティポリシーの構築に関する少なくとも１つの組込みポリシーを使用し、
前記高位スクリプトは、実行された時に別のＪａｖａＳｃｒｉｐｔコード又はＨＴＭＬ文書ピースを生成するスクリプトである請求項２３に記載のシステム。
【請求項３０】
前記スクリプトプログラムが、動的に生成されたＪａｖａＳｃｒｉｐｔである自己修正コードを含む請求項２３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラミングの分野に関する。より詳細には、本発明は、ハイパーテキストマークアップ言語文書及び／又はクライアント側スクリプティングプログラムに関するセキュリティポリシーの構築に関する。
【０００２】
本特許出願は、２００８年１月２５日出願の「A  Method  And  Apparatus  For  Constructing  Security  Policies  For  Web  Content  Instrumentation  Against  Browser-Based  Attacks」という名称の、対応する米国特許仮出願第６１／０２３５４８号の優先権を主張し、それを参照することによって組み込む。
【０００３】
本願は、２００７年６月２０日に同時に出願され、本発明の企業譲受人に譲渡された、Program  Instrumentation  Method  and  Apparatus  for  Constraining  the  Behavior  of  Embedded  Script  in  Documentsという名称の同時係属出願である米国特許出願第１１／７６５９１８号に関連する。
【背景技術】
【０００４】
ブラウザベースのアタックは、ウェブユーザが予期する主要なセキュリティ脅威の１つとなりつつある。例えば、そのようなアタックは、本物のウェブサイト内の脆弱性を利用すること、本物のウェブサイトを装ってユーザの機密情報を盗むこと、ウェブブラウザ内の脆弱性を利用することなどによって実施されることがある。ブラウザベースのアタックの一例として、クロスサイトスクリプティング（Ｃｒｏｓｓ−Ｓｉｄｅ  Ｓｃｒｉｐｔｉｎｇ）（ＸＳＳ）が、ウェブアプリケーションで見つかる最も一般的な脆弱性のうちの１つである。脆弱なウェブサイトは、サーバ側で適切な入力検証が欠如しているために、悪意のあるＪａｖａＳｃｒｉｐｔ（登録商標）コードをウェブページ内に伝播させることがある。次に、ウェブサイトから来る悪意のあるコードが、ウェブサイトのドメインの特権を得る。例えば、悪意のあるコードは、ウェブサイトによって設定されたクッキーを読み取り、それをアタッカに送信することができる。ブラウザベースのアタックの別の例として、フィッシングアタックが、ユーザをだましてフィッシングサイト（例えば、本物のウェブサイトを装う悪意のあるウェブサイト）を訪問させる。そのようなアタックは通常、対応する本物のサイトから情報をコピーし、人を惑わせる識別情報（例えばロケーションバー及びステータスバー内の内容）をＪａｖａＳｃｒｉｐｔコードで提示することによって機能する。ブラウザは一般に、同一発信元原理などのいくつかの共通機構を適用して、異なるドメインからのウェブコンテンツ間の対話を制限するが、実現される保護は、非常にきめの粗いものである。上述の２つのタイプのアタックはどちらも、同一発信元原理に違反することなく実施することができる。さらに、ブラウザは時として、実装の欠陥のために、利用可能な脆弱性を有することがある。
【０００５】
非特許文献１で説明されているように、最近の研究は、コードインスツルメンテーション（ｃｏｄｅ  ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ）を適用して、ブラウザ脆弱性に対処する。しかし、そのような研究は、ポリシーライタ向けのポリシー構築フレームワークを提供しない。非特許文献２で説明されているように、コードインスツルメンテーションはまた、Ｊａｖａ（登録商標）プログラム向けの様々なセキュリティポリシーを実施するためにも適用されてきた。この手法は、セキュリティポリシーの構成をサポートするポリシーフレームワークを提供する。しかし、この技法は、ＪａｖａＳｃｒｉｐｔが動的な言語及び環境であるために、ＨＴＭＬ及びＪａｖａＳｃｒｉｐｔで書かれたウェブコンテンツには適用可能ではない。Ｊａｖａ（登録商標）プログラムをインスツルメント（ｉｎｓｔｒｕｍｅｎｔ）するとき、監視する必要があるのはメソッドだけであり、メソッドは、定義した後は変更することができない。一方、ＨＴＭＬ及びＪａｖａＳｃｒｉｐｔで書かれたウェブコンテンツでは、十分なポリシー実施のために、多くの異なる文法カテゴリを監視する必要があり、高位スクリプト及び反映を介して（静的に利用可能ではない）新しいコンテンツを実行時に生成することができる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】論文「BrowserShield:  Vulnerability-Driven  Filtering  of  Dynamic  HTML」、著者：Charlie  Reis、John  Dunagan、Helen  J.  Wang、Ophe  Dubrovsky及びSaher  Esmeir、OSDI  2006にて出版
【非特許文献２】論文「Composing  security  policies  with  Polymer」、著者：Lujo  Bauer、Jay  Ligatti及びDavid  Walker、PLDI  2005にて出版
【発明の概要】
【０００７】
アタックに対するコンテンツインスツルメンテーションに関するセキュリティポリシーを構築する方法及び装置が本明細書で開示される。一実施形態では、この方法は、少なくとも１つの書換えテンプレート、少なくとも１つの編集オートマトンポリシー、又は少なくとも１つのポリシーテンプレートを使用して、ウェブコンテンツに関する１つ又は複数のセキュリティポリシーを構築すること、及び文書中のスクリプトプログラムを書き換えて、スクリプトの実行の結果として生じる挙動を１つ又は複数のポリシーに準拠させることを含む。
【０００８】
本発明の様々な実施形態の以下で与えられる詳細な説明及び添付の図面から、本発明をより完全に理解されよう。しかし、詳細な説明及び添付の図面は、本発明をその特定の実施形態に限定するものとして理解するのではなく、説明及び理解のためのものに過ぎないことを理解されたい。
【図面の簡単な説明】
【０００９】
【図１】ウェブコンテンツのためのインスツルメンテーション機構及び実施機構に関するアーキテクチャの一実施形態を示す図である。
【図２】ポリシーコンパイルの一実施形態を示す図である。
【図３】文書中に埋め込まれたスクリプトプログラムをインスツルメントするプロセスの一実施形態の流れ図である。
【図４】インスツルメント後文書に関する構造の一実施形態を示す図である。
【図５】クッキーポリシーに関する編集オートマトンの一実施形態を示す図である。
【図６】ウェブコンテンツインスツルメンテーションに関するＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図７】ウェブコンテンツインスツルメンテーションに関するｄＲｅａｄＡｃｃｅｓｓＴｒａｃｋｍｇテンプレートの一実施形態を示す図である。
【図８】ウェブコンテンツインスツルメンテーションに関するＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートの一実施形態を示す図である。
【図９】ウェブコンテンツインスツルメンテーションに関するｄＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートの一実施形態を示す図である。
【図１０】ウェブコンテンツインスツルメンテーションに関するＣａｌｌＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図１１】ウェブコンテンツインスツルメンテーションに関するｄＣａｌｌＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図１２】ウェブコンテンツインスツルメンテーションに関するＣａｌｌＲｅｐｌａｃｉｎｇテンプレートの一実施形態を示す図である。
【図１３】ウェブコンテンツインスツルメンテーションに関するｄＣａｌｌＲｅｐｌａｃｉｎｇテンプレートの一実施形態を示す図である。
【図１４】ウェブコンテンツインスツルメンテーションに関するＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図１５】ウェブコンテンツインスツルメンテーションに関するＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートの一実施形態を示す図である。
【図１６】ウェブコンテンツインスツルメンテーションに関するｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートの一実施形態を示す図である。
【図１７】ウェブコンテンツインスツルメンテーションに関するＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図１８】ウェブコンテンツインスツルメンテーションに関するＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図１９】ウェブコンテンツインスツルメンテーションに関するＨＴＭＬＦｏｒｅｉｇｎＳｏｕｒｃｅＬｏａｄｉｎｇテンプレートの一実施形態を示す図である。
【図２０】ウェブコンテンツインスツルメンテーションに関するＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートの一実施形態を示す図である。
【図２１】ウェブコンテンツインスツルメンテーションに関するＣａｌｌＲｅｐｌａｃｉｎｇテンプレートの一実施形態を示す図である。
【図２２】ウェブコンテンツインスツルメンテーションに関するＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図２３】ウェブコンテンツインスツルメンテーションに関するコンパウンドポリシーテンプレートの一実施形態を示す図である。
【図２４】ウェブコンテンツインスツルメンテーションに関するｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレートの一実施形態を示す図である。
【図２５】ＦｉｒｅＦｏｘでのウェブコンテンツインスツルメンテーションに関するｗｉｎＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレートの一実施形態を示す図である。
【図２６】ウェブコンテンツインスツルメンテーションに関するＧｌｏｂａｌＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇテンプレートの一実施形態を示す図である。
【図２７】ユーザに対するユーザインターフェース重ね合せポリシー違反通知の一実施形態を示す図である。
【図２８】本明細書に記載の操作のうちの１つ又は複数を実施することのできるコンピュータシステムのブロック図である。
【発明を実施するための形態】
【００１０】
ポリシー構築のためのシステム及び方法が説明される。構築されたポリシーが、ハイパーテキストマークアップ言語（ＨＴＭＬ）文書及び／又はその中に埋め込まれたクライアント側スクリプティングプログラムに対して実施される。一実施形態では、クライアント側スクリプティングプログラムはＪａｖａＳｃｒｉｐｔプログラムである。ポリシーライタに対して、ポリシー構築インターフェースが様々なレベルで提供される。一実施形態では、ポリシー構築は、書換えテンプレート、編集オートマトン、ポリシーテンプレート、及び組込みポリシーを使用する。
【００１１】
一実施形態では、書換えテンプレートが、どの構文構成を監視し、それをどのように書き換えるかを指定する低レベルインターフェースとして定義される。これにより、ポリシー構築のための十分な表現力が得られるが、望ましいレベルよりも低レベルの細部が公開される。
【００１２】
一実施形態では、より高レベルのポリシー構築が、本明細書ではＥＡポリシーと呼ぶ、編集オートマトンの概念により直接的に基づく。一実施形態では、ＸＭＬ表現を使用して編集オートマトンがサポートされ、ＸＭＬ表現が書換え規則にコンパイルされる。一実施形態では、編集オートマトンは汎用（例えば、特定のプログラミング言語、プラットフォームなどから抽象化されたポリシー規則）であり、ブラウザベースのセキュリティポリシーが、ドメイン特有の抽象化からさらに恩恵を受ける。
【００１３】
一実施形態では、再発パターン又は再発ポリシーがポリシーテンプレートとして編成され、以下で論じられる実施形態では、ポリシーテンプレートは、特殊編集オートマトンのテンプレートである。一実施形態では、ポリシーテンプレートについてＸＭＬ表現が使用され、ポリシーテンプレートにより、単純なテンプレートの自然な構成が、コンパウンドテンプレートを形成することが可能となる。一実施形態では、共通セキュリティ実施及びインスツルメンテーション正確性について、いくつかの書換え規則が適用される。一実施形態では、こうした書換え規則は組込みポリシーと呼ばれ、こうした書換え規則は主に、実行時生成ＨＴＭＬ文書ピース及び／又はＪａｖａＳｃｒｉｐｔコードのインスツルメンテーションのためのものである。
【００１４】
以下の説明では、本発明のより完全な説明を与えるために多数の細部が説明される。しかし、こうした特定の細部なしに本発明を実施できることは当業者には明らかであろう。別の場合には、本発明を不明瞭にするのを避けるために、周知の構造及び装置が、詳細に示されるのではなく、ブロック図形式で示される。
【００１５】
以下の詳細な説明の一部は、コンピュータメモリ内のデータビットに対する操作のアルゴリズム表現及び記号表現によって提示される。こうしたアルゴリズム的な説明及び表現は、データ処理技術分野の技術者がその成果の主旨を当業者に最も効果的に伝えるために使用される手段である。アルゴリズムはこの場合、かつ一般に、所望の結果に導く首尾一貫したステップのシーケンスと考えられる。ステップは、物理量の物理的操作を必要とするものである。通常、必須ではないが、こうした量は、格納、転送、組合せ、比較、或いは操作することのできる電気信号又は磁気信号の形態を取る。時には、主に一般的な用法の理由で、こうした信号をビット、値、要素、シンボル、文字、用語、数字などとして参照することが好都合であることが示されている。
【００１６】
しかし、こうした用語又は類似の用語のすべてが適切な物理量と関連付けられるべきであり、こうした用語又は類似の用語のすべては、こうした量に適用される好都合なラベルに過ぎないことに留意されたい。別段の具体的な言及がない限り、以下の議論から明らかなように、説明全体を通して、「処理」、「コンピューティング」、「計算」、「決定」、「表示」などの用語を使用する議論は、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表されるデータを操作し、コンピュータシステムメモリ又はレジスタ又は他のそのような情報格納装置、情報伝送装置、又は情報表示装置内の物理量として同様に表される他のデータに変換する、コンピュータシステム又は類似の電子コンピューティング装置の動作及びプロセスを指すことを理解されたい。
【００１７】
本発明はまた、本明細書の操作を実施する装置に関する。この装置は、必要とされる目的のために特別に構築することができ、又はコンピュータ内に格納されたコンピュータプログラムによって選択的に活動化又は再構成される汎用コンピュータを含むことができる。そのようなコンピュータプログラムは、限定はしないが、フレキシブルディスク、光ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、読取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カードを含む任意のタイプのディスク、電子命令を格納するのに適し、コンピュータシステムバスにそれぞれ結合された任意のタイプの媒体などのコンピュータ可読記憶媒体内に格納することができる。
【００１８】
本明細書で提示されるアルゴリズム及び表示は、何らかの特定のコンピュータ又は他の装置に固有に関係するわけではない。本明細書の教示によるプログラムと共に様々な汎用システムを使用することができ、又はより特殊化された装置を構築して、必要な方法ステップを実施することが好都合であることを示すことができる。様々なこうしたシステムにとって必要な構造が、以下の説明から明らかとなるであろう。さらに、本発明は、特定のプログラミング言語を参照して説明されない。様々なプログラミング言語を使用して、本明細書に記載の本発明の教示を実施できることを理解されよう。
【００１９】
ウェブコンテンツインスツルメンテーション
ウェブコンテンツをブラウザ内でレンダリングする前にウェブコンテンツをインスツルメントすることができ、したがって仲裁機構が、ウェブコンテンツの挙動を監視し、それを限定することができる。こうした機構が、セキュリティポリシーが編集オートマトンの形態で与えられることを想定する厳密なフレームワークの状況で議論される。こうしたプロセス、及びブラウザのためのセキュリティ実施機構が、「Program  Instrumentation  Method  and  Apparatus  for  Constraining  the  Behavior  of  Embedded  Script  in  HTML  Documents」という名称の、米国特許出願公開２００８−００８３０１２Ａ１
として公開されている米国特許出願第１１／７６５９１８号で説明されている。しかし、そのようなポリシーの構築は、抽象的なままに保たれる。
【００２０】
本明細書に記載の実施形態で、そのようなセキュリティポリシーの実際の構築が説明される。現実世界で使用されるセキュリティポリシーを指定するときには多くの構文構成が関係するので、セキュリティポリシーの実際の構築は重要である。良好なポリシー構築方法はまた、ブラウザ機能とセキュリティアタックの両方の発展によるセキュリティポリシーの保守及び更新に対しても有用である。そのような構築後ポリシーの実施も、以下で詳細に説明される。
【００２１】
一実施形態では、セキュリティポリシーがポリシーコンパイラオフラインを使用して構築され、通常のクライアント側スクリプティングコードとして着信コンテンツに組み込まれる。一実施形態では、クライアント側スクリプティングコードは、クライアントブラウザ上で実行されたときに所望のセキュリティポリシーを実施する。本明細書に記載の実施形態では、クライアント側スクリプティングコードは、ＪａｖａＳｃｒｉｐｔ、Ｆｌａｓｈ、ＡｃｔｉｏｎＳｃｒｉｐｔなどのいずれでもよい。議論を容易にするために、本明細書の議論及び例に関してＪａｖａＳｃｒｉｐｔが使用される。しかし、本明細書に記載の技法は、様々なクライアント側スクリプティングコードタイプに適用可能である。
【００２２】
図１は、ウェブコンテンツのためのインスツルメンテーション機構及び実施機構に関するアーキテクチャの一実施形態を示す図である。図１に示されるように、例示的コードスニペットが示される。一実施形態では、恐らくはＪａｖａＳｃｒｉｐｔコードが埋め込まれた、文書１１２などの着信ＨＴＭＬ文書が、インスツルメンテーションプロキシ１１４によって代行受信される。一実施形態では、文書１１２は、埋込みＪａｖａＳｃｒｉｐｔコードを含むことができる。一実施形態では、インスツルメンテーションプロキシ１１４が、ブラウザとウェブコンテンツの間のプロキシサーバとして配置され、又はブラウザ自体の一部として配置される。
【００２３】
一実施形態では、インスツルメンテーションプロキシ１１４が、ネットワークゲートウェイ（又は企業ファイアウォール）上に位置するプロキシプログラムとして実装される。したがって、インスツルメンテーションプロキシ１１４は、注目のウェブコンテンツ及びＪａｖａＳｃｒｉｐｔコードとは別々に維持される。一実施形態では、ブラウザ１２２は、すべての着信ウェブトラフィックについてインスツルメンテーションプロキシ１１４に照会し、インスツルメンテーションプロキシ１１４は、本明細書で論じるように、インスツルメント後クライアント側スクリプティングプログラム（例えば、ＪａｖａＳｃｒｉｐｔプログラム、Ｆｌａｓｈプログラム、ＡｃｔｉｏｎＳｃｒｉｐｔプログラムなど）で応答する。一実施形態では、インスツルメンテーションプロキシ１１４を元のウェブコンテンツとウェブブラウザとの間のプロキシとして実装することにより、集中型仲裁及びポリシー管理技法が提供される。さらに、インスツルメンテーションプロキシ１１４をプロキシとして実装することにより、クライアントウェブブラウザ１２２に対する変更が不要となり、インスツルメント後ウェブコンテンツが、複数のブラウザタイプにとってアクセス可能となる（以下で論じるわずかな例外あり）。インスツルメンテーションプロキシ１１４に関するプロキシベースのアーキテクチャにより、さらに、ウェブページを安全にレンダリングするためにクライアント装置に対して課される計算要件が最小限に抑えられ、したがってモバイル装置ウェブブラウザの使用に伴う配置に適している。
【００２４】
一実施形態では、インスツルメンテーションプロキシ１１４は、書換え規則１０８の形態のポリシー入力を受信する。一実施形態では、インスツルメンテーションが、書換え規則１０８に従う構文指示書換えとして処理される。書換え規則１０８が文書１１２の着信コンテンツと合致しない極端なケースでは、インスツルメンテーションプロセスは本質的には識別機能となる。一実施形態では、書換え規則１０８がポリシーコンパイラ１０２によって生成される。
【００２５】
一実施形態では、ポリシーコンパイラ１０２はポリシーテンプレート１０４の形態の入力を受信し、ポリシーコンパイラが、ポリシーテンプレート１０４をセキュリティポリシー１０６にインスタンス化する（１３０）。一実施形態では、セキュリティポリシー１０６は、以下でより詳細に論じるように、対応するＸＭＬ表現で指定される編集オートマトンである。次いでセキュリティポリシー１０６が書換え規則１０８に変換され（１３２）、書換え規則１０８は、インスツルメンテーションプロキシ１１４に対する入力とみなすべきである。
【００２６】
一実施形態では、書換え規則１０８は、書換えテンプレート１１０のインスタンスの入力をさらに受信する。一実施形態では、書換えテンプレート１１０は循環ポリシーシナリオを表し、循環ポリシーシナリオはオンザフライでは構築されないが、共通セキュリティポリシー問題又は循環セキュリティポリシー問題に対処する。書換えテンプレートがインスタンス化され（１３４）、インスツルメンテーションプロキシ１１４に入力される書換え規則１０８として供給される。
【００２７】
一実施形態では、セキュリティモジュール１１８が、インスツルメンテーションプロキシ１１４によってインスツルメントされているウェブコンテンツに組み込まれる。インスツルメント後ウェブページは、内部でセキュリティモジュール１１８を参照する。インスツルメント後コンテンツ１２０がクライアントブラウザ１２２に送達され、クライアントブラウザ１２２内でレンダリングされる。一実施形態では、セキュリティポリシー実施に関して、クライアントブラウザ１２２でのレンダリング中に実行時チェックを起動することができる。
【００２８】
一実施形態では、図１のインスツルメンテーションフレームワークは、実行時にオンデマンドで実行時生成コンテンツ（例えば、実行時生成文書１１６などのＨＴＭＬ文書及びＪａｖａＳｃｒｉｐｔコード）のインスツルメンテーションをサポートする。これを使用可能にするために、インスツルメンテーションプロキシ１１４は、それぞれＨＴＭＬ文書及びＪａｖａＳｃｒｉｐｔコードのインスツルメンテーションのための２つの特別な関数を提供する。これらの関数は、インスツルメント後文書中のＪａｖａＳｃｒｉｐｔコード内部から起動されるべきである。一実施形態では、実行時インスツルメンテーションを必要とする構文構成が、書換え規則１０８として明示的に指定される。
【００２９】
図２は、ポリシーコンパイルの一実施形態を示す。一実施形態では、ポリシーコンパイラ１０２で使用されるポリシーコンパイルプロセスなどのポリシーコンパイルプロセスの内部フローが、多段階変換として与えられる。図２の実施形態では、コンパイルプロセスが左から右に遷移する。縁部の数は、入力及び出力の数の対応を示す。例えば、ポリシーテンプレート２０２のインスタンスは、内部でＥＡポリシー２０４に変換することができ、次いで各ポリシーは、書換えテンプレートインスタンス２０６、遷移関数２０８、０以上の置換アクション２１０、及び状態２１２を生成する。
【００３０】
一実施形態では、組込みポリシー２１４は、類似のコンパイルプロセスを経ることができる。一実施形態では、組込みポリシー２１４はポリシーテンプレートインスタンス、ＥＡポリシー、又は書換えテンプレートインスタンスでよいので、水平方向に伸びるボックスがダイアグラムで使用される。ユーティリティ関数２１８もコンパイラの一部として供給される。一実施形態では、ユーティリティ関数をセキュリティモジュール２２０に組み込むことができる。ユーティリティ関数の例には、セキュリティモジュールを初期化するユーティリティ関数、オンデマンドインスツルメンテーション、ブラウザユーザとの実行時対話を要求するユーティリティ関数などが含まれる。
【００３１】
図３は、文書中に埋め込まれたスクリプトプログラムをインスツルメントするプロセスの一実施形態の流れ図である。このプロセスは、ハードウェア（例えば、回路、専用論理機構）、ソフトウェア（汎用コンピュータシステム又は専用マシン上で実行されるソフトウェアなど）、又はそれらの組合せを含むことのできる論理機構によって実施される。
【００３２】
図３を参照すると、プロセスは、１つ又は複数のセキュリティポリシーを構築する論理機構を処理することによって開始する（処理ブロック３００）。一実施形態では、１つ又は複数のセキュリティポリシーがウェブコンテンツインスツルメンテーションのために構築される。一実施形態では、書換えテンプレート、編集オートマトンポリシー、ポリシーテンプレート、及び組込みテンプレートが、構築中に処理論理機構によって使用される。
【００３３】
次いで処理論理機構は、文書中のスクリプトプログラムを書き換え、スクリプトの実行の結果として生じる挙動を１つ又は複数のポリシーに準拠させる（処理ブロック３０１）。一実施形態では、文書は、クライアント内のブラウザにダウンロードされた文書である。一実施形態では、文書はＨＴＭＬ文書である。一実施形態では、スクリプトプログラムはＪａｖａＳｃｒｉｐｔである。別の実施形態では、スクリプトプログラムはＦｌａｓｈプログラム、ＡｃｔｉｏｎＳｃｒｉｐｔプログラムなどである。一実施形態では、スクリプトプログラムは自己修正コードを含む。自己修正コードは、動的に生成されたＪａｖａＳｃｒｉｐｔを含むことができる。
【００３４】
図４は、インスツルメント後文書４０２に関する構造の一実施形態を示す。一実施形態では、ポリシーコンパイラ１０２によって与えられた書換え規則に基づいて、インスツルメンタ（ｉｎｓｔｒｕｍｅｎｔｏｒ）として動作する図１のインスツルメンテーションプロキシが、着信コンテンツ内の関連構文構成を、そのリダイレクタ関数４５４に対する呼出しに置換し、リダイレクタ関数４５４は、インスツルメント後文書４０２の挿入されたセキュリティモジュール４０４の一部である。一実施形態では、リダイレクタ関数４５４は、実行時に編集オートマトンを維持する遷移関数４５６を呼び出し、ポリシーライタによって与えられる置換アクション４５８を起動する。リダイレクタ関数４５４及び置換アクション４５８は、必要に応じてユーティリティ関数４６０も参照する。セキュリティモジュールは、書換え済みコード４０６の前にクライアントブラウザでロードされると想定される。
【００３５】
一実施形態では、インスツルメント後文書４０２に関するコード実行の流れが矢印を用いて示される。一実施形態では、セキュリティモジュール４０４のリダイレクタ関数４５４は、書換え済みコード４０６から呼び出すことができる。こうした関数は、実行時情報を使用して、適切な遷移関数４５６に実行をディスパッチする。例えば、オブジェクトメソッドｗｉｎｄｏｗ．ｏｐｅｎを処理するために、元の文書中のｏｐｅｎに対するすべてのメソッド呼出しが、リダイレクタ関数に対する呼出しを使用して置換され、実行時チェックが適用されて、メソッド呼出しの親オブジェクトがブラウザ環境で当初設定されたｗｉｎｄｏｗオブジェクトに対する参照を本当に保持するかどうかが確認される。
【００３６】
一実施形態では、リダイレクタ関数４５４が、現文書（例えば、現ブラウザウィンドウ又はフレーム内でレンダリングされた文書）のセキュリティモジュール４０４内に常駐する関数だけでなく、関連文書（図示せず）（例えば、関連ブラウザウィンドウ又はフレーム内でレンダリングされた文書）のセキュリティモジュール内に常駐する関数にも操作をディスパッチすることができる。
【００３７】
テンプレートの書換え
一実施形態では、監視されるアクションの構文カテゴリの編成を助けるように書換えテンプレートが定義される。いくつかの例には、プロパティアクセス、関数呼出し及びメソッド呼出し、オブジェクト作成などが含まれる。一実施形態では、書換えテンプレートの大部分のカテゴリについて、（ＪａｖａＳｃｒｉｐｔ内の）プロパティ名、（ＪａｖａＳｃｒｉｐｔ内の）親オブジェクト名、（ＨＴＭＬ内の）タグ／属性名などの関連するパラメータがテンプレート内で指定され、監視されるアクションが一意的に識別される。一実施形態では、テンプレートを特定のパラメータ及び関連するパラメータでインスタンス化することにより、書換えテンプレートの具体的なインスタンスが得られる。ウェブコンテンツ内の様々な操作について書換えテンプレートを導出することができる。表１は、例示的書換えテンプレートを列挙する。
【表１】
0005478513.tif 000002
【表２】
0005478513.tif 000003
本明細書に記載の書換えテンプレートのフレームワーク並びに他のフレームワーク要素は拡張可能であり、上記のカテゴリ及びテンプレートは、必要に応じて新しいタイプのアタックに対処するために、修正、削除、又はカテゴリ／テンプレート追加することができることに留意されたい。
【００３８】
上記の表１は、インスツルメンテーションのために監視することが有用な構文カテゴリを要約する。一例として、ウェブサイトがＸＳＳ脆弱性を有し、表２で与えられるコードが、あるウェブページに注入されると想定する。
【表３】
0005478513.tif 000004
ビクティムユーザが（例えばリンクをクリックすることによって）コードを活動化するとき、イメージタグがレンダリングされ、ＨＴＴＰ要求が、ｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅの抽出後の値と共に「ａｔｔａｃｋｅｒ．ｃｏｍ」に送信される。そのようなアタックを防止するために、一実施形態では、表１のｆｓｒｃカテゴリを使用して、悪意のあるＨＴＴＰ要求の実行の前にＨＴＴＰ要求に関する実行時チェックを挿入することができる。このプロセスの実施形態が以下でさらに詳細に説明される。
【００３９】
書換え規則に基づくＨＴＭＬ及び／又はＪａｖａＳｃｒｉｐｔのインスツルメンティング
一実施形態では、図１に関して上記で図示し、議論したインスツルメンテーションプロキシ１１４などのインスツルメンテーションプロキシに関する書換えプロセスは、パーサ１４０、複数のリライタ（ｒｅｗｒｉｔｅｒ）（例えば、ＨＴＭＬリライタ１４２（ａ）及びＪａｖａＳｃｒｉｐｔリライタ１４２（ｂ））、及びコードジェネレータ１４６を介して実施することができる。一実施形態では、リライタ１４２（ａ）／（ｂ）は、パーサ１４０によって生成された抽象構文ツリー（ＡＳＴ）を操作することによって機能する。コンテンツを当初要求したブラウザに変換後ＡＳＴを供給する前に、変換後ＡＳＴが、コードジェネレータ１４６によってＨＴＭＬ及びＪａｖａＳｃｒｉｐｔに変換される。
【００４０】
いくつかの書換え規則が、異なるポリシーに対処するときに、セキュリティモジュール１１８に関する異なるコードを供給するようにリライタ１４２（ａ）／（ｂ）に指示する。一実施形態では、これを抽象化レベルで管理するのを助けるように、上記の表１に示される書換えテンプレートが使用される。ポリシーライタは、書換えテンプレートをインスタンス化して規則を書き換え、規則はインスツルメンテーションを誘導する。その結果、書換え規則の設計及び実装が、構文詳細によって不明瞭にされることはない。
【００４１】
同様に、ＨＴＭＬ文書からのＪａｖａＳｃｒｉｐｔコードの識別、並びにＪａｖａＳｃｒｉｐｔコードからの高位スクリプトの識別は、本明細書で論じられる書換えテンプレートを介して実施することができる。これらはどちらも、書換えテンプレートを使用して一様に処理することができる。
【００４２】
書換えテンプレートの一般的な使用の実施形態が、以下の表３に示されている。表の第１列は、テンプレート名及びパラメータを（テンプレート名，パラメータ１，パラメータ２，．．．）の形で示し、いくつかのインスタンスサンプルを示す。第２列は、書換えすべきコードピースの対応する構文形式を示す。ここでＡＭは、監視されるアクションを指す。さらに、以下で論じるように、ＡＭ（テンプレート名，パラメータ１，パラメータ２，．．．）は、特定の監視されるアクションの識別のために使用される。第３列は、元のコードピースを置換するのに使用されるターゲットコードピースを示す。一実施形態では、こうしたテンプレートは、関連するＪａｖａＳｃｒｉｐｔエンティティ及びコードを使用して、書換え規則に対してインスタンス化されるべきである。インスタンス化された書換え規則が与えられたとすると、リライタ（図１のリライタ１４２（ａ）及び（ｂ）など）は、第２列のパターンを識別し、第３列に従ってインスツルメント後コードを生成する。一実施形態では、着信コンテンツに加えられるメソッド及びプロパティが、表内で＿ｐｍと名前が付けられたセキュリティモジュール内に置かれる（異なる実施形態では他の名前を適用することができる）。一実施形態では、セキュリティモジュールを着信コンテキストに挿入し、インスツルメント後プログラムと同じ実行環境内で実行することができる。この場合,グローバル名前空間の汚染を回避するために、関連する名前を用いた既存のオブジェクトの適切なリネームが書換え中に実施され、競合が回避される（すなわち、＿ｐｍを＿＿ｐｍに変更し、＿＿ｐｍを＿＿＿ｐｍに変更し、以下同様である）。構文構成の、関連するアクションとしての識別のために実行時情報が必要かどうかに応じて、監視される構文構成が、リダイレクタ関数（メソッド名にｒｅｄｉｒｅｃｔの接頭辞が付けられる）又は遷移関数（メソッド名にｔｒａｎｓの接頭辞が付けられる）に対する呼出しで置換される。別の実施形態では、各ケースについてリダイレクタ関数を生成することもでき、必要なときにリダイレクタ関数内部から遷移関数を呼び出すことができる。
【表４】
0005478513.tif 000005
【表５】
0005478513.tif 000006
表３から、一例として（ｇｅｔ，ｏｂｊ，ｐｒｏｐ）に関する書換えテンプレートを取り上げる。この書換えテンプレートは、プロパティ（フィールドとメソッドの両方）アクセスの構文構成をどのように書き換えるかを指定する。本明細書では、ｇｅｔがこのテンプレートの名前として使用され、ｏｂｊ及びｐｒｏｐが、実際のオブジェクト及びプロパティと共にインスタンス化すべきパラメータとして使用される。
【００４３】
ｇｅｔについて２つの例示的インスタンス化が与えられる。第１の例示的インスタンス化は、フィールドアクセスｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅに対するものである。このインスタンス化は、クッキーを盗むことを試みるコードを識別するようにクッキーアクセスを監視するのに有用である。（ｇｅｔ，ｄｏｃｕｍｅｎｔ，ｃｏｏｋｉｅ）に基づいて、ＪａｖａＳｃｒｉｐｔリライタ（例えば図１のＪａｖａＳｃｒｉｐｔリライタ１４２（ｂ））が、プロパティアクセスのすべてのＡＳＴピース（すなわち、形状ｏｂｊ．ｐｒｏｐ及びｏｂｊ［”ｐｒｏｐ”］のＡＳＴピース）を識別し、それ
をリダイレクタ関数＿ｐｍ．ｒｅｄｉｒｅｃｔＰｒｏｐＲｅａｄ（ｏｂｊ，ｐｒｏｐ）に対する呼出しで置換する。タスクの中でもとりわけ、セキュリティモジュール＿ｐｍは、ｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅなどの関連するＪａｖａＳｃｒｉｐｔエンティティへのプライベート参照のリストを維持する。図２及び４で上述したリダイレクタは、実行時にパラメータｏｂｊ及びｐｒｏｐを検査し、それがｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅを表すかどうかを確認する（ｏｂｊ及びｐｒｏｐがそれぞれｄｏｃｕｍｅｎｔ及びｃｏｏｋｉｅであることが静的に既知である場合、効率性のために遷移関数を直接的に使用することができる）。そうである場合、リダイレクタは、テンプレートインスタンス化中に供給される置換アクションを実施することに進む。そうでない場合、リダイレクタ関数は、元のオブジェクトプロパティを単に返し、したがって識別関数のように振る舞う。
【００４４】
置換アクションの実装の一実施形態が以下で論じられる。一実施形態では、置換アクションがＪａｖａＳｃｒｉｐｔで実施される。一実施形態では、置換アクションは、リダイレクタの引数に関する任意の計算及び解析を実施すること、役に立つプロンプトをユーザに提供すること、及び／又は他の関連する作業を実施することができる。典型的な一作業は、セキュリティポリシーで使用される編集オートマトンの監視状態を進めることである。
【００４５】
ｇｅｔカテゴリの例示的な一インスタンス化は、ｗｉｎｄｏｗ．ａｌｅｒｔへのアクセスを含む。ＪａｖａＳｃｒｉｐｔにより、フィールドと同様にメソッドにアクセスすることが可能となることに留意されたい。例えば、ｖａｒ  ｆ＝ｗｉｎｄｏｗ．ａｌｅｒｔは、メソッドｗｉｎｄｏｗ．ａｌｅｒｔを変数ｆに割り当てる。一実施形態では、このことが、上記で説明したのと同じｇｅｔカテゴリを使用して書換え中に処理され、＿ｐｍ．ｒｅｄｉｒｅｃｔＰｒｏｐＲｅａｄのボディが、そのようなアクセスを監視することができ、（例えば、ｗｉｎｄｏｗ．ａｌｅｒｔへのアクセスをインスツルメント後バージョンへのアクセスで置換するために）関連ポリシーを実装することができる。
【００４６】
表３の残りの部分は、ｇｅｔカテゴリに関して上記で論じたのと同じパターンをたどる。一実施形態では、（ｃａｌｌ，ｏｂｊ，ｍｅｔｈ）は、メソッド呼出しに関連する構文カテゴリ（例えば、形状ｏｂｊ．ｐｒｏｐ（Ｅ，．．．）又はｏｂｊ［”ｐｒｏｐ”］（Ｅ，．．．）のコード）を識別し、リダイレクタ＿ｐｍ．ｒｅｄｉｒｅｃｔＭｅｔｈｏｄＣａｌｌへの呼出しを生成するようにＪａｖａＳｃｒｉｐｔリライタ１４２に通知する。書換え規則の同じセットに従って、現スコープチェーンを使用して、メソッド呼出しに対する引数ＥがＥｉｎｓｔｒに書き換えられる（同じことが、表中の他の大部分のケースにも当てはまる）。サンプルインスタンス化（ｃａｌｌ，ｗｉｎｄｏｗ，ｏｐｅｎ）について、先のフィールドアクセス例の場合と同様に、リダイレクタは、実行時にパラメータｏｂｊ及びｐｒｏｐを検査し、それがテンプレートパラメータｗｉｎｄｏｗ及びｏｐｅｎと合致するかどうかを確認し、セキュリティポリシーで指定される置換アクションを実施する。
【００４７】
一実施形態では、（ｄｇｅｔ，ｄｐｒｏｐ）テンプレート及び（ｄｃａｌｌ，ｄｍｅｔｈ）テンプレートが、デフォルトプロパティにアクセスし、デフォルト関数を呼び出すように設計される。（ｄｇｅｔ，ｄｐｒｏｐ）テンプレート及び（ｄｃａｌｌ，ｄｍｅｔｈ）テンプレートは、単一のパラメータだけを必要とすることを除いて、ｇｅｔテンプレート及びｃａｌｌテンプレートと同様である。ｄｃａｌｌの微細な区別は、ｅｖａｌメソッドの処理に関係する。ｅｖａｌは、文字列引数を取り、それを実行時にＪａｖａＳｃｒｉｐｔコードに変換する。リダイレクタ内部から呼び出された場合、スコープコンテキストが変化し、したがって、生成されるＪａｖａＳｃｒｉｐｔコードの挙動に影響を及ぼす。したがって、特殊テスト＿ｐｍ．ｉｓＥｖａｌ（）が使用されてｅｖａｌへの呼出しが識別され、ｅｖａｌ時に、コードが生成されてインスツルメント後引数Ｅｉｎｓｔｒが評価される。
【００４８】
一実施形態では、（ｓｅｔ，ｏｂｊ，ｐｒｏｐ）テンプレート及び（ｄｓｅｔ，ｄｐｒｏｐ）テンプレートは、それぞれオブジェクトプロパティ及びデフォルトプロパティを設定するためのものである。一実施形態では、ＪａｖａＳｃｒｉｐｔコードは、ＪａｖａＳｃｒｉｐｔ擬似ＵＲＬプロトコルに続いて、ＵＲＬが予想される所にも出現することができる。例えば、＜ａ  ｈｒｅｆ＝”ｊａｖａｓｃｒｉｐｔ：Ｅ”＞は、活動化されたとき、ＪａｖａＳｃｒｉｐｔコードＥを実行する。一実施形態では、（ｊｓｕｒｌ）テンプレートが、ＵＲＬが予想される所にＪａｖａＳｃｒｉｐｔコードが出現するときの状況を扱う。
【００４９】
一実施形態では、（ｅｘｔｓｃｒ）テンプレートが、＜ｓｃｒｉｐｔ  ｓｒｃ＝”ｄ．ｐ”＞＜／ｓｃｒｉｐｔ＞を介して、外部ＪａｖａＳｃｒｉｐｔファイルの包含を扱う。但しｄはドメイン（例えばｄｏｃｏｍｏ．ｃｏｍ）であり、ｐはＪａｖａＳｃｒｉｐｔファイル（例えばｘｙｚ．ｊｓ）への経路である。一実施形態では、対応するファイルをターゲットとするためにそのようなアクセスが書き換えられる。一実施形態では、このファイルは、元のソースからロードされたファイルのインスツルメント後バージョンである。
【００５０】
一実施形態では、（ｃｈｕｎｋ）テンプレートが、ＨＴＭＬ文書からスクリプトチャンクを識別し、プロローグ、エピローグ、及び／又は例外処理機構を挿入する。これは主に、非文法的なスクリプトが、表４で提示される例などで、ＪａｖａＳｃｒｉｐｔ注入を引き起こすことを防止するために設計される。
【表６】
0005478513.tif 000007
一実施形態では、ｃｈｕｎｋＥｎｄ（）が、バッファリング済み文字列（すなわち、ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ（）の連結文字列引数）を廃棄して、ＪａｖａＳｃｒｉｐｔ表現Ｅの実行を回避する。一実施形態では、（ｃｈｕｎｋ）テンプレートを使用して、ポリシー違反時にＪａｖａＳｃｒｉｐｔコードのさらなる実行を停止し、関連情報をユーザに提示することもできる。
【００５１】
プロキシベースのアーキテクチャでは、リダイレクタ（例えば、セキュリティポリシーの一実施形態）を、インスツルメント後ＨＴＭＬ文書と同じ実行環境にロードすることができる。一実施形態では、すべてのリダイレクタが＿ｐｍモジュール内に編成され、＿ｐｍモジュールが、ｗｉｎｄｏｗオブジェクトのプロパティとして着信文書に添付される。ＪａｖａＳｃｒｉｐｔのｆｏｒ．．．ｉｎ構成は、オブジェクトのすべてのプロパティへのアクセス権を与える。したがって、着信ＪａｖａＳｃｒｉｐｔは、それを使用して、悪意を抱いて、又は意図せずに＿ｐｍモジュールにアクセスすることができる。一実施形態では、（ｆｏｒ−ｉｎ）テンプレートは、ｆｏｒ．．．ｉｎ構成を書き換えて、＿ｐｍへのそのようなアクセスを回避する。一実施形態では、リダイレクタｒｅｄｉｒｅｃｔＦｏｒＩｎは、＿ｐｍを含まないプロパティのリストを返す。
【００５２】
一実施形態では、（ｗｉｔｈ）テンプレートが、ＪａｖａＳｃｒｉｐｔ  ｗｉｔｈ構成の特殊スコーピング要件を扱うように設計される。具体的には、ｗｉｔｈ（ｏｂｊ）｛Ｅ｝は、スコープチェーンにｏｂｊを追加することにより、囲まれた表現Ｅのスコーピングを変更する。例えば、以下の表５及び６のコード例はどちらも、同じ警報メッセージ「ｈｅｌｌｏ」を生成する。
【表７】
0005478513.tif 000008
【表８】
0005478513.tif 000009
一実施形態では、テンプレート（ｗｉｔｈ）が＿ｐｍ．ｉｎｓｔｒＳｃｏｐｅ（ｏｂｊ，Ｅ）を生成し、ヘルパ関数ｉｎｓｔｒＳｃｏｐｅは、更新後スコープチェーンに基づいて、現スコープチェーン及びインスツルメントＥの上にｏｂｊを追加する。上記の他のテンプレートの説明に関して、ＥｉｎｓｔｒがＥのインスツルメント後バージョンとして使用された。対照的に、Ｅｉｎｓｔｒは、スコープチェーンを更新することなく得られる。
【００５３】
したがって、上記で論じた実施形態の要約として、プロキシ（例えばインスツルメンタ１１４）が、ＡＳＴに関する構文指示パターン照合によって書換えを実施し、リダイレクタ関数が使用され、適切な仲裁論理機構及びセキュリティポリシーが実装される。一実施形態では、ポリシーライタが、書換えテンプレートを使用して、書換え及びアクション置換をカスタマイズすることができる。異なるエンティティに対して同じ書換えテンプレートが複数回インスタンス化される場合、リダイレクタに関するマージ関数ボディを有する単一の書換え規則が生成される。一実施形態では、インスツルメンテーションプロセスは、所与の書換え規則によって記述されるケースだけを書き換える。一定のセキュリティポリシーが単一の書換えテンプレート（例えば、恐らくは複数のインスタンス化を伴うｇｅｔ）の使用だけを必要とする場合、１つの書換え規則だけが生成され、対応する構文構成（例えば、ｏｂｊ．ｐｒｏｐ、ｏｂｊ［”ｐｒｏｐ”］）が、アクション置換のために書き換えられる。これにより、不必要な書換え及び実行オーバヘッドが回避される。
【００５４】
リダイレクタ
上記で論じたように、リダイレクタ関数は、構文構成が関連するアクション及び／又は悪意のあるアクションに関係するかどうかを実行時に判断するのに使用される。そのようなリダイレクタを直接的に指定することに加えて、一実施形態では、リダイレクタ関数は、ポリシーコンパイル中に自動的に生成することもできる。表７に示される、ｇｅｔカテゴリの以下の３つの書換え規則が、ポリシーコンパイル中に得られる。
【表９】
0005478513.tif 000010
生成されるリダイレクタ関数ｒｅｄｉｒｅｃｔＰｒｏｐＲｅａｄ（）のスニペットの一実施形態は、表８に示される形を取ることができる。
【表１０】
0005478513.tif 000011
表８に示されるコードでは、ｓｗｉｔｃｈ文を使用して、プロパティ名が文字列オブジェクトと比較され、ｉｓＷｉｎｄｏｗ（）、ｉｓＤｏｃｕｍｅｎｔ（）、ｉｓＸＭＬＨｔｔｐＲｅｑｕｅｓｔ（）などのいくつかのユーティリティ関数（セキュリティモジュールの一部でもある）を使用して、親オブジェクトがチェックされる。合致が見つかったとき、適切な遷移関数が、ａｐｐｌｙ（）（これはＪａｖａＳｃｒｉｐｔＡＰＩの一部である）を使用して呼び出される。監視されるアクションの引数が、ｓｌｉｃｅＡｒｒａｙ（）ユーティリティ関数を使用して伝播され、引数オブジェクトが、関数に渡されるすべての引数を格納する。
【００５５】
一実施形態では、リダイレクタ関数は、着信コンテンツからセキュリティモジュールを隠すこともできる。一実施形態では、一続きのコード（表８に示されるコードスニペットでは省略）が、リダイレクタ関数の先頭で使用され、親オブジェクトが本当にセキュリティモジュールであることが保証される。これにより、着信コンテンツがセキュリティモジュールを改ざんすることが防止される。
【００５６】
編集オートマトンポリシー
上述の書換えテンプレート及びその比較リダイレクタコードは、低レベルポリシー記述機構として働く。低レベルポリシー記述機構により、ポリシーライタが、ＪａｖａＳｃｒｉｐｔ構文の特異性に気を散らされることなく「アクション」の抽象的概念に焦点を当てることが可能となる。しかし、編集オートマトンも符号化しなければならない。構築のために使用される場合、ポリシーライタは、ポリシーオートマトンの状態及び遷移を直接的にリダイレクタコード内で実装しなければならない。
【００５７】
編集オートマトンの概念により直接的に対処し、ポリシーライタが置換アクション（例えば、実行時チェックの挿入）の実装にさらに焦点を当てることを可能にするポリシーフレームワークの一実施形態が、以下で説明される。一実施形態では、図１のポリシーコンパイラ１０２は、オフラインで高レベルポリシーを書換え規則にコンパイルするスタンドアロンプログラムである。
【００５８】
一実施形態では、編集オートマトンは、１組の状態（初期状態として１つの状態を有する）、１組のアクション及び置換アクション、並びに１組の状態遷移を含む。任意の状態で、入力アクションが、どの遷移を行うか、及びどの出力アクションを生成するかを決定する。一実施形態では、編集オートマトンに関するこうした側面をセキュリティポリシーとして記述するのに、ＸＭＬファイルが使用される。
【００５９】
一例を挙げると、図５に示される編集オートマトンは、以下の表９で示されるようにＸＭＬで表すことができる。
【表１１】
0005478513.tif 000012
表９に示されるコードは、ＥＡタグで示されるように、単一編集オートマトン（ＥＡ）を記述する。ＥＡは、初期状態及び１つ又は複数の遷移からなる。各遷移は、編集オートマトン内の単一エッジを記述する。一例として、最初の遷移を取り上げる。（ｉｎｐｕｔ）アクション、ｆｒｏｍ−ｓｔａｔｅ、及びｔｏ−ｓｔａｔｅの３つの構成要素が含まれる。アクションで記述される書換えテンプレート（ｇｅｔ，ｄｏｃｕｍｅｎｔ，ｃｏｏｋｉｅ）に合致する入力アクション時に、現状態がｓ１である場合、編集オートマトンは状態ｓ２に進む。この特定の編集オートマトンがこの遷移に関して置換アクションを指定しないので、元のアクションが実施される。しかし、一般には、第２遷移のケースのように、置換アクションを入力アクション及び状態と共に指定することができる。一実施形態では、置換アクションに関するコードは、表３で指定されるように、対応するリダイレクタの正式なパラメータを参照することができる。
【００６０】
一実施形態では、編集オートマトンから書換え規則へのコンパイルは、以下のように進行する。入力アクションがテンプレート名及びパラメータによって識別される。一実施形態では、識別が表３に基づいて実施される。一実施形態では、インスタンス化する、対応する書換えテンプレートと、コードをボディとして供給するリダイレクタとが存在する。コードは、ｆｒｏｍ／ｔｏ状態に基づいて状態遷移を実施し、置換アクションを起動する。より具体的には、上記で論じた遷移について、ポリシーコンパイラが書換え規則（ｇｅｔ，ｄｏｃｕｍｅｎｔ，ｃｏｏｋｉｅ）を生成し、表１０で示されるリダイレクタ＿ｐｍ．ｒｅｄｉｒｅｃｔＰｒｏｐＲｅａｄコードに挿入する。
【表１２】
0005478513.tif 000013
但し、ｏｂｊ及びｐｒｏｐは、＿ｐｍ．ｒｅｄｉｒｅｃｔＰｒｏｐＲｅａｄの正式なパラメータを表す。＿ｐｍ．ｃｏｍｐａｒｅは、実行時に呼び出され、ｏｂｊ．ｐｒｏｐの識別を判断するユーティリティ関数である。ここではわかりやすいように文字列ｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅが使用されるが、実際の実装は、効率性のために、ｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅオブジェクトに対するプライベート参照と共に直接的に働く。＿ｐｍ．ｓｔａｔｅは、セキュリティモジュールによって維持される編集オートマトンの状態であり、ｓ１及びｓ２は、編集オートマトンの状態を表す。ｏｂｊ．ｐｒｏｐが本当にｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅである場合、５０１から５０２への状態遷移が適用される。このケースでは、編集オートマトンは置換アクションを指定しないので、その後で、元のアクションｏｂｊ．ｐｒｏｐが無条件で実施される。
【００６１】
一実施形態では、ポリシーコンパイラが編集オートマトンを書換え規則及びリダイレクタのリストにコンパイルした後、上述のリライタが引き継ぎ、対応するリダイレクタを使用して、すべての関連する構文構成を書き換える。
【００６２】
ポリシーテンプレート
一実施形態では、編集オートマトンの再発パターン又は共通パターンを識別し、ポリシーテンプレートとして編成することができる。したがって、スクラッチから編集オートマトンを記述するのではなく、ポリシーライタは、関連するテンプレートをインスタンス化して、有用なポリシーを迅速に得ることができる。一実施形態では、各ポリシーテンプレートは固有名を有し、適切なパラメータを使用してインスタンス化することができる。一実施形態では、ポリシーを指定するために、ポリシーライタは以下を実施する。（ａ）ポリシーテンプレートを選び、（ｂ）適用可能なときにパラメータ、状態、及び置換アクションをインスタンス化し、（ｃ）適用可能なときに置換アクションを実施する。
ＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレート及びｄＲｅａｄＡｃｃｅｓｓＴｒａｃｌｄｎｇテンプレート
一実施形態では、ポリシーテンプレートＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇが、一定のオブジェクトプロパティ（フィールド又はメソッド）がアクセスされるかどうかをチェックするように設計される。ＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートは、コードの挙動を修正しない。オブジェクトプロパティｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅを一例として用いると、テンプレートからインスタンス化された、対応する編集オートマトンフラグメントの一実施形態が図６で与えられる。
【００６３】
ダイアグラム中の２つのノードは、状態（例えば状態６０１及び６０２）を表し、２つのノードを接続するエッジは状態遷移を表す。遷移は、ｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅへの読取りアクセス時に生じ、ＡＭ（ｇｅｔ，ｄｏｃｕｍｅｎｔ，ｃｏｏｋｉｅ）を使用して識別される。一実施形態では、単独で使用されるとき、開始状態６０１が、開始ノードのない矢印で指示される。しかし、別の実施形態では、他のテンプレートと組み合わせたときに（後で論じられる）、開始状態が明示的に指定される。
【００６４】
一実施形態では、ポリシーライタは、タプル（ＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇ，ｏｂｊ，ｐｒｏｐ，ｓ１，ｓ２）を使用して、このテンプレート（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｐｒｏｐ、ｓ１、及びｓ２は、実際のオブジェクト、プロパティ、及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１１に示される以下のＸＭＬフォーマットを使用する。
【表１３】
0005478513.tif 000014
テンプレートｄＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇは、デフォルトプロパティに対して働くことを除いてＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇと同様である。ｄＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートの一実施形態が、図７に示される。
【００６５】
一実施形態では、ポリシーライタは、タプル（ｄＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇ，ｄｐｒｏｐ，ｓ１，ｓ２）を使用して、ｄＲｅａｄＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレート（及びそのインスタンス）を参照する。但し、ｄｐｒｏｐ、ｓ１、及びｓ２は、実際のデフォルトプロパティ及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１２に示される以下のＸＭＬフォーマットを使用する。
【表１４】
0005478513.tif 000015
ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレート及びｄＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレート
一実施形態では、テンプレートＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇが、プロパティアクセスをフィルタリングするのに使用される。ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートは、置換アクションを使用してコードの挙動を変更することができる。例えば、ポリシーライタがクッキーへのアクセスをフィルタリングすることを望む場合、図８に示されるインスタンス化の一実施形態を使用することができる。
【００６６】
この実施形態では、状態８０１  ｓｏｍｅ＿ｓｔａｔｅが、ポリシーライタによってカスタマイズされ、置換が特定の状態で行われるべきことを指定する。状態が指定されなかった場合、置換が無条件で適用される。関数ｆｉｌｔｅｒＤｏｃｕｍｅｎｔＣｏｏｋｉｅ（）は、ポリシーライタによって実装されるカスタム化置換アクションである。一例を挙げると、クッキー値ではなく、空文字列を常に返すために、表１３に示されるようなテンプレートをインスタンス化することができる。
【表１５】
0005478513.tif 000016
一実施形態では、ポリシーライタは、タプル（ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ，ｏｂｊ，ｐｒｏｐ，ｓ，ｒｐ）を使用して、ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレート（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｐｒｏｐ、ｓ、及びｒｐは、実際のオブジェクト、プロパティ、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１４に示される以下のＸＭＬフォーマットを使用する。
【表１６】
0005478513.tif 000017
一実施形態では、ｄＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇは、デフォルトプロパティに対して働くことを除いてＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇと同様である。ｄＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートの一実施形態が、図９に示される。
【００６７】
一実施形態では、ポリシーライタは、タプル（ｄＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ，ｄｐｒｏｐ，ｓ，ｒｐ）を使用して、このテンプレート（及びそのインスタンス）を参照する。但し、ｄｐｒｏｐ、ｓ、及びｒｐは、実際のデフォルトプロパティ、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１５に示される以下のＸＭＬフォーマットを使用する。
【表１７】
0005478513.tif 000018
ＣａｌｌＴｒａｃｋｉｎｇテンプレート及びｄＣａｌｌＴｒａｃｋｉｎｇテンプレート  一実施形態では、ポリシーテンプレートＣａｌｌＴｒａｃｋｉｎｇは、一定のオブジェクトメソッドが呼び出されるかどうかをチェックするように設計される。ＣａｌｌＴｒａｃｋｉｎｇテンプレートは、コードの挙動を修正しない。オブジェクトプロパティｗｉｎｄｏｗ．ａｌｅｒｔを一例として用いると、ＣａｌｌＴｒａｃｋｉｎｇテンプレートからインスタンス化された編集オートマトンフラグメントの一実施形態が、図１０に示される。
【００６８】
ダイアグラム中の２つのノードは、状態（例えば状態１００１及び１００２）を表し、２つのノードを接続するエッジは状態遷移を表す。図示される実施形態では、遷移は、ｗｉｎｄｏｗ．ａｌｅｒｔに対する呼出し時に生じ、ＡＭ（ｃａｌｌ，ｗｉｎｄｏｗ，ａｌｅｒｔ）を使用して識別される。単独で使用されるとき、開始状態１００１が、開始ノードのない矢印で指示される。しかし、他のテンプレートと組み合わせたときに（後で論じられる）、開始状態１００１が明示的に指定される。
【００６９】
一実施形態では、ポリシーライタは、タプル（ＣａｌｌＴｒａｃｋｉｎｇ，ｏｂｊ，ｍｅｔｈ，ｓ１，ｓ２）を使用して、このテンプレート（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｍｅｔｈ、ｓ１、及びｓ２は、実際のオブジェクト、メソッド、及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１６に示される以下のＸＭＬフォーマットを使用する。
【表１８】
0005478513.tif 000019
テンプレートｄＣａｌｌＴｒａｃｋｉｎｇは、デフォルトプロパティに対して働くことを除いてＣａｌｌＴｒａｃｋｉｎｇと同様である。ｄＣａｌｌＴｒａｃｋｉｎｇテンプレートの一実施形態が、図１１に示される。
【００７０】
一実施形態では、ポリシーライタは、タプル（ｄＣａｌｌＴｒａｃｋｉｎｇ，ｄｍｅｔｈ，ｓ１，ｓ２）を使用して、このテンプレート（及びそのインスタンス）を参照する。但し、ｄｍｅｔｈ、ｓ１、及びｓ２は、実際のデフォルトメソッド及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１７に示される以下のＸＭＬフォーマットを使用する。
【表１９】
0005478513.tif 000020
ＣａｌｌＲｅｐｌａｃｉｎｇテンプレート及びｄＣａｌｌＲｅｐｌａｃｉｎｇテンプレート
一実施形態では、テンプレートＣａｌｌＲｅｐｌａｃｉｎｇが、関数呼出しを置換するために使用される。一実施形態では、ＣａｌｌＲｅｐｌａｃｉｎｇテンプレートは、置換アクションを使用してコードの挙動を変更することができる。例えば、ポリシーライタがｒｐＡｌｅｒｔ（）に対するｗｉｎｄｏｗ．ａｌｅｒｔ（）の関数呼出しを置換することを望む場合、図１２に示されるインスタンス化の実施形態を使用することができる。
【００７１】
図示されるＣａｌｌＲｅｐｌａｃｉｎｇのインスタンス化では、状態１２０１  ｓｏｍｅ＿ｓｔａｔｅが、ポリシーライタによってカスタマイズされ、置換が特定の状態で行われるべきことを指定する。状態が指定されなかった場合、置換が無条件で適用される。関数ｒｐＡｌｅｒｔ（）は、ポリシーライタによって実装されるカスタム化置換アクションである。
【００７２】
一実施形態では、ポリシーライタは、タプル（ＣａｌｌＲｅｐｌａｃｉｎｇ，ｏｂｊ，ｍｅｔｈ，ｓ，ｒｐ）を使用して、このテンプレート（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｍｅｔｈ、ｓ、及びｒｐは、実際のオブジェクト、メソッド、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１８に示される以下のＸＭＬフォーマットを使用する。
【表２０】
0005478513.tif 000021
ｄＣａｌｌＲｅｐｌａｃｉｎｇの一実施形態は、デフォルト関数に対して働くことを除いてＣａｌｌＲｅｐｌａｃｉｎｇと同様である。ｄＣａｌｌＲｅｐｌａｃｉｎｇのインスタンス化の例示的一実施形態が、図１３に示される。
【００７３】
一実施形態では、ポリシーライタは、タプル（ｄＣａｌｌＲｅｐｌａｃｉｎｇ，ｄｍｅｔｈ，ｓ，ｒｐ）を使用して、このテンプレート（及びそのインスタンス）を参照する。但し、ｄｍｅｔｈ、ｓ、及びｒｐは、実際のデフォルト関数、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表１９に示される以下のＸＭＬフォーマットを使用する。
【表２１】
0005478513.tif 000022
ＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレート及びｄＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレート
一実施形態では、ＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレート及びｄＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートが、プロパティへの書込みアクセスを追跡するように設計される。こうしたテンプレートに関する典型的な使用ケースは、ブラウザ環境によって供給される標準オブジェクトメソッド及びデフォルト関数の汚染追跡時である。例えば、図１４に示されるＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇのインスタンス化を使用してｗｉｎｄｏｗ．ａｌｅｒｔが上書きされるときをチェックすることができる。
【００７４】
一実施形態では、ポリシーライタは、タプル（ＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇ，ｏｂｊ，ｐｒｏｐ，ｓ１，ｓ２）を使用して、ＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇ（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｐｒｏｐ、ｓ１、及びＳ２は、実際のオブジェクト、プロパティ、及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表２０に示される以下のＸＭＬフォーマットを使用する。
【表２２】
0005478513.tif 000023
一実施形態では、ポリシーライタは、タプル（ｄＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｔｎｇ，ｄｐｒｏｐ，ｓ１，ｓ２）を使用して、ｄＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇ（及びそのインスタンス）を参照する。但し、ｄｐｒｏｐ、ｓ１、及びｓ２は、実際のデフォルトプロパティ及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、以下のＸＭＬフォーマットを使用する。
【表２３】
0005478513.tif 000024
ＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレート及びｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレート
一実施形態では、ＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレート及びｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇテンプレートが、それぞれオブジェクトメソッド及びデフォルト関数への書込みアクセスをフィルタリングするように設計される。例えば、ｗｉｎｄｏｗ．ａｌｅｒｔへの書込みアクセスは、図１５に示されるＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇのインスタンス化を使用してフィルタリングすることができる。図１５の例示的実施形態では、ｓｏｍｅ＿ｓｔａｔｅが、ポリシーライタによってカスタマイズされる。状態が指定されなかった場合、フィルタリングが無条件で適用される。フィルタリング関数ｆｉｌｔｅｒＳｅｔＷｉｎｄｏｗＡｌｅｒｔ（）がポリシーライタによって実装される。ｗｉｎｄｏｗ．ａｌｅｒｔへのどんな割当ても防止するために、フィルタリング関数は、表２２に示されるように実装することができる。
【表２４】
0005478513.tif 000025
一実施形態では、上記の置換アクション内の第３引数ｒｈｓ＿ｅｘｐｒが、元の監視されるアクションから得られる右辺の式を反映する。
【００７５】
一実施形態では、ポリシーライタは、タプル（ＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ，ｏｂｊ，ｐｒｏｐ，ｓ，ｒｐ）を使用して、ＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｐｒｏｐ、ｓ、及びｒｐは、実際のオブジェクト、プロパティ、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表２３に示される以下のＸＭＬフォーマットを使用する。
【表２５】
0005478513.tif 000026
テンプレートｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇは、デフォルトプロパティに対して働くことを除いてＷｒｉｔｅＡｃｃｃｓｓＦｉｌｔｅｒｉｎｇと同様である。ＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇのサンプルインスタンス化の一実施形態が、図１６に示される。一実施形態では、置換アクションに関するサンプルコードが、以下の表２４で与えられる。
【表２６】
0005478513.tif 000027
一実施形態では、ポリシーライタは、タプル（ｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ，ｄｐｒｏｐ，ｓ，ｒｐ）を使用して、ｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ（及びそのインスタンス）を参照する。但し、ｄｐｒｏｐ、ｓ、及びｒｐは、実際のデフォルトプロパティ、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表２５に示される以下のＸＭＬフォーマットを使用する。
【表２７】
0005478513.tif 000028
ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレート及びＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレート
表２６に示されるコード例は、ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレート及びＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレートの動機付けを示す。
【表２８】
0005478513.tif 000029
このコードは、ｗｉｎｄｏｗ．ｏｐｅｎに対する呼出しと共にｗｉｎｄｏｗオブジェクトのｏｎｕｎｌｏａｄイベントハンドラをプログラムする。ｏｎｕｎｌｏａｄイベントハンドラは、ウィンドウがまさに閉じられようとしているときに、ブラウザによって起動される。上記のコードを使用すると、着信コンテンツが扱いにくい挙動を示すことがある（例えば、ユーザが古いウィンドウを閉じるときはいつでも、新しいウィンドウが作成される）。
【００７６】
これに対処するために、イベントハンドラなどの一定の関数の呼出しを監視することが望ましい。一実施形態では、２つのテンプレートＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ及びＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇは、そのような関数が実行されたかどうかをポリシーライタが追跡する助けとなる。ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ及び関連するセマンティクスの一実施形態が、図１７に示されるように編集オートマトンを使用して示される。ＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇのケースは、デフォルト関数に対して働くことを除いて同様である。
【００７７】
図示される実施形態では、このインスタンス化は、アクションＡＭ（ｓｅｔ，ｗｉｎｄｏｗ，ｏｎｕｎｌｏａｄ）を監視する。関数ｔｒａｎｓ（ｓｔａｔｅ＿ｎａｍｅ）及びｅｘｅｃＦｕｎｃ（）は、説明を単純化するのに使用されるマクロ関数である。関数ｔｒａｎｓ（ｓｔａｔｅ＿ｎａｍｅ）及びｅｘｅｃＦｕｎｃ（）は、ポリシーライタで実装されることを意味するものではない。ｔｒａｎｓ（ｓｔａｔｅ＿ｎａｍｅ）は、現状態１７０１からｓｔａｔｅ＿ｎａｍｅ．ｅｘｅｃＦｕｎｃ（）１７０２への状態遷移を表し、ｓｔａｔｅ＿ｎａｍｅ．ｅｘｅｃＦｕｎｃ（）１７０２は、対応する監視される関数（例えば、上記の例ではｗｉｎｄｏｗ．ｏｎｕｎｌｏａｄ）の実行を表す。
【００７８】
このテンプレートを使用するとき、一実施形態では、ポリシーライタは、例えば表２７に示されるようなテンプレートをインスタンス化する。
【表２９】
0005478513.tif 000030
この例では、ポリシーコンパイラがコードを挿入し、監視される関数の前後の必要な状態遷移を実施する。このテンプレートは、単独では、監視されるアクションの挙動を変更しない。しかし、状態遷移は、関連する挙動を識別するのに有用である。その結果、このテンプレートはしばしば、使用されるときに他のテンプレートと組み合わされる。
【００７９】
一実施形態では、ポリシーライタは、タプル（ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ，ｏｂｊ，ｐｒｏｐ，ｓ１，ｓ２）を使用して、ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｐｒｏｐ、ｓ１、及びｓ２は、実際のオブジェクト、プロパティ、及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表２８に示される以下のＸＭＬフォーマットを使用する。
【表３０】
0005478513.tif 000031
一実施形態では、ポリシーライタは、タプル（ＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ，ｄｐｒｏｐ，ｓ１，ｓ２）を使用して、ＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ（及びそのインスタンス）を参照する。但し、ｄｐｒｏｐ、ｓ１、及びｓ２は、実際のデフォルトプロパティ及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表２９に示される以下のＸＭＬフォーマットを使用する。
【表３１】
0005478513.tif 000032
ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇ
ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇは、以下で論じる実施形態に従って、イベントハンドラの実行時実行を追跡するための別のテンプレートである。ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレート及びＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇテンプレートと同様に動機付けられるものの、一実施形態では、ＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇテンプレートは、異なる構文構成をターゲットとする。ｏｎｕｎｌｏａｄを特定の関数に割り当てることによってｏｎｕｎｌｏａｄイベントハンドラ内部で新しいウィンドウを開くことの一例が、先に与えられた。以下のコードのようにＨＴＭＬタグを使用して同一の挙動をプログラムすることができる。
【表３２】
0005478513.tif 000033
上記の２つのテンプレートと同様の目的で設計されるので、ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇのセマンティクスは同様である。ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇテンプレートに関するインスタンス化編集オートマトンが、図１８に示される。監視される異なる構文構成を反映する書換えテンプレートｅｖｔＨＴＭＬが使用されることに留意されたい。
【００８０】
一実施形態では、ポリシーライタは、タプル（ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇ，ｔａｇ，ａｔｔｒＥｖｔ，ｓ１，ｓ２）を使用して、ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇ（及びそのインスタンス）を参照する。但し、ｔａｇ、ａｔｔｒＥｖｔ、ｓ１、及びｓ２は、実際のタグ、属性、及び状態と共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表３１に示される以下のＸＭＬフォーマットを使用する。
【表３３】
0005478513.tif 000034
ＨＴＭＬＦｏｒｅｉｇｎＳｏｕｒｃｅＬｏａｄｉｎｇテンプレート
一部のＨＴＭＬ文書は、イメージやインラインドフレームなどのフォーリンソースのローディングを必要とする。そのようなローディングを利用して、インターネット上の任意のドメインに情報を送信することができる。一実施形態では、実行時チェックを適用して、望ましくない情報漏洩を防止することができる。図１９は、ポリシーライタがフォーリンソースのローディング前に実行時チェックを挿入するのに使用することのできるＨＴＭＬＦｏｒｅｉｇｎＳｏｏｒｃｅＬｏａｄｉｎｇテンプレートの一実施形態を示す。一実施形態では、実行時チェックは、主張されるソースのＵＲＬの検証を含む。
【００８１】
表３２に示される以下のＸＭＬコードは、ＨＴＭＬＦｏｒｅｉｇｎＳｏｕｒｃｅＬｏａｄｉｎｇポリシーテンプレートの例示的インスタンス化である。
【表３４】
0005478513.tif 000035
一実施形態では、ｃｈｅｃｋＴｈｅｎＬｏａｄの第１引数がターゲット構成の文書オブジェクト要素を取り、この例では、文書オブジェクト要素はＨＴＭＬＩｍａｇｅＥｌｅｍｅｎｔである。関数の第２引数はＵＲＬオブジェクトを取り、ＵＲＬオブジェクトは、＜ｉｍｇ＞タグのｓｒｃ属性内の文字列に対応する。関数は、ＵＲＬを別の文字列「ａｔｔａｃｋｅｒ．ｃｏｍ」と突き合わせる。突合せが失敗した場合にのみ、元のＵＲＬがロードされる。
【００８２】
一実施形態では、ポリシーライタは、タプル（ＨＴＭＬＦｏｒｅｉｇｎＳｏｕｒｃｅＬｏａｄｉｎｇ，ｔａｇ，ｓｒｃ，ａｔｔｒＥｖｔ，ｓ，ｒｐ）を使用して、ＨＴＭＬＦｏｒｅｉｇｎＳｏｕｒｃｅＬｏａｄｉｎｇ（及びそのインスタンス）を参照する。但し、ｄｐｒｏｐ、ｓ、及びｒｐは、実際のタグ、属性、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表３４に示される以下のＸＭＬフォーマットを使用する。
【表３５】
0005478513.tif 000036
コンパウンドＥＡテンプレート
上記で論じたテンプレートの実施形態はそれぞれ、セキュリティ問題の特定の側面を記述する。一実施形態では、複数のテンプレートを一緒に使用してポリシーを実施することができる。一例として、ｗｉｎｄｏｗ．ａｌｅｒｔ（）によって生成されるポップアップ警報テキストに接頭辞「Ｓｅｃｕｒｉｔｙ  Ｍｏｄｕｌｅ：」を追加する単純なポリシーを考慮する。一実施形態では、置換関数ａｌｅｒｔＷｉｔｈＰｒｅｆｉｘ（）が、表３５に示されるように実装される。
【表３６】
0005478513.tif 000037
一実施形態では、実際のポリシーが、３つのポリシーテンプレートのインスタンス化を組み合わせることによって構成される。まず、図２０に示されるように、ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇが適用されて、オブジェクトプロパティｗｉｎｄｏｗ．ａｌｅｒｔへのすべての読取りアクセスがフィルタリングされる。ｆｉｌｔｅｒＷｉｎｄｏｗＡｌｅｒｔは、実行時に実行されたとき、上記で定義される関数ａｌｅｒｔＷｉｔｈＰｒｅｆｉｘを返すことに留意されたい。
【００８３】
次に、図２１に示されるように、ＣａｌｌＲｅｐｌａｃｉｎｇが適用されて、ｗｉｎｄｏｗ．ａｌｅｒｔ（）に対するすべての読出しがａｌｅｒｔＷｉｔｈＰｒｅｆｉｘ（）で置換される。
【００８４】
最後に、表３６に図示される例で示されるように、着信文書中のＪａｖａＳｃｒｉｐｔコードが他の機能に関するｗｉｎｄｏｗ．ａｌｅｒｔを書き換えることを選ぶことができることを考慮しなければならない。
【表３７】
0005478513.tif 000038
この場合、ｗｉｎｄｏｗ．ａｌｅｒｔが「無視」関数として再定義される。したがって、再定義後に同一のフィルタリング及び置換を実施することは適切ではない。したがって、より実際的なポリシーは、ｗｉｎｄｏｗ．ａｌｅｒｔが再定義されていないときに、読取りアクセスをフィルタリングし、ｗｉｎｄｏｗ．ａｌｅｒｔに対する呼出しを置換することである。図２２に示されるＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇテンプレートの一実施形態を使用して、このことに対処することができる。
【００８５】
したがって、一実施形態では、図２３で示されるように、コンパウンドポリシーが、ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ、ＣａｌｌＲｅｐｌａｃｉｎｇ、及びＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇを組み合わせることによって得られる。
【００８６】
対応するＸＭＬ表現が、以下の表３７で示される。
【表３８】
0005478513.tif 000039
一実施形態では、表３７に示されるＸＭＬ表現は、３つの構成要素ポリシー（例えば、ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ、ＣａｌｌＲｅｐｌａｃｉｎｇ、及びＷｒｉｔｅＡｃｃｅｓｓＴｒａｃｋｉｎｇに関するポリシー）の直接的組合せである。着信ＪａｖａＳｃｒｉｐｔコードで任意のメソッドを再定義することができるので、コンパウンドポリシーは非常に有用なポリシーである。したがって、コンパウンドテンプレートＦｕｎｃＲｅｐｌａｃｅｍｅｎｔが、３つの別々のポリシーテンプレートを組み合わせるパターンを直接的に表現するのに使用される。次いで、ｗｉｎｄｏｗ．ａｌｅｒｔに関する実際のポリシーが、このコンパウンドテンプレートを対応するパラメータでインスタンス化することによって得られる。このことは、表３８に示されるように、ポリシーテンプレートをインスタンス化するのに使用されるのと同じフォーマットを使用して達成することができる。
【表３９】
0005478513.tif 000040
一実施形態では、一般的なケースで、ポリシーライタは、タプル（ＦｕｎｃＲｅｐｌａｃｅｍｅｎｔ，ｏｂｊ，ｍｅｔｈ，ｓ１，ｓ２，ｒｐ）を使用して、ＦｕｎｃＲｅｐｌａｃｅｍｅｎｔ（及びそのインスタンス）を参照する。但し、ｏｂｊ、ｍｅｔｈ、ｓ１、ｓ２及びｒｐは、実際のオブジェクト、メソッド、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表３９に示される以下のＸＭＬフォーマットを使用する。
【表４０】
0005478513.tif 000041
一実施形態では、図２４に示されるように、関連するｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレートが、デフォルト関数に関して定義される。一実施形態では、ポリシーライタは、タプル（ｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔ，ｍｅｔｈ，ｓ１，ｓ２，ｒｐ）を使用して、ｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔ（及びそのインスタンス）を参照する。但し、ｍｅｔｈ、ｓ１、ｓ２、及びｒｐは、実際のデフォルトメソッド、状態、及び置換アクションと共にインスタンス化されるべきである。一実施形態では、ポリシーライタは、ポリシーコンパイラによる自動処理のために、表４０に示される以下のＸＭＬフォーマットを使用する。
【表４１】
0005478513.tif 000042
一実施形態では、図２４に示されるｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレートの適用可能性はブラウザ依存である。例えば、マイクロソフト（ＭＩＣＲＯＳＯＦＴ）（商標）インターネットエクスプローラ（ＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ）（商標）では、警報などのデフォルト関数への割当てが可能ではなく、そのような試行時に例外が投じられる。そのようなブラウザ依存性からポリシーライタを保護するために、ｗｉｎＦｕｎｃＲｅｐｌａｃｅｍｅｎｔと呼ばれ、図２５に示される別のコンパウンドテンプレートを使用することができ、ｗｉｎＦｕｎｃＲｅｐｌａｃｅｍｅｎｔは、本質的にはインターネットエクスプローラ用のＦｕｎｃＲｅｐｌａｃｅｍｅｎｔに対するエイリアスであるが、他のブラウザ（例えばＦｉｒｅｆｏｘ）用のＦｕｎｃＲｅｐｌａｃｅｍｅｎｔ及びｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔの構成である。ｗｉｎＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレートのサンプルインスタンス化の一実施形態が、図２５に示される。
【００８７】
コンパウンドテンプレートに関する一実施形態の別の例が、イベントハンドラを追跡するように設計される。例えば、ＨＴＭＬ文書中のｏｎｕｎｌｏａｄイベントハンドラは、表４１の５つの変形形態によって示されるように、いくつかの異なる方式で符号化することができる。
【表４２】
0005478513.tif 000043
上記のすべてのコードピースは、関数ｅｖｔＨａｎｄｌｅｒをｏｎｕｎｌｏａｄイベントに関するハンドラとして割り当てる。一実施形態では、コンパウンドテンプレートを使用してこれらのすべてのケースをカバーすることが望ましい。本明細書では、このコンパウンドテンプレートは、ＧｌｏｂａｌＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇと呼ばれる。ＧｌｏｂａｌＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇが<＜ｉｍｇ＞などの他のタグに関するイベントではなく、ＨＴＭＬ文書のイベントに適用可能であることに留意されたい。
【００８８】
一実施形態では、ＧｌｏｂａｌＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇテンプレートは、ＲｕｎｔｉｍｅＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ、ＲｕｎｔｉｍｅＤＦｕｎｃＥｘｅｃＴｒａｃｋｉｎｇ、ＨＴＭＬＥｖｅｎｔＨａｎｄｌｅｒＥｘｅｃＴｒａｃｋｉｎｇ、ＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ、及びｄＲｅａｄＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇという５つの構成要素ポリシーテンプレートの合成である。ｏｎｕｎｌｏａｄイベントの例示的インスタンス化の一実施形態が、図２６に示される。関数ａｄｄＴｒａｃｋａｂｌｅＥｖｅｎｔＬｉｓｔｅｎｅｒ（）は、ａｄｄＥｖｅｎｔＬｉｓｔｎｅｒ（）（イベントハンドラとして登録された関数）の第２引数を追跡可能なものに置換する。置換は、ｗｉｎＦｕｎｃＲｅｐｌａｃｅｍｅｎｔに基づいて条件付きで行われる。
【００８９】
高位スクリプトに関する組込みポリシー
本明細書で論じられるインスツルメンテーションプロセスは、セキュリティポリシーによって誘導される。一実施形態では、こうしたポリシーは、上記で導入したポリシーテンプレートを使用して、ポリシーライタによってカスタム化することができる。しかし、いくつかの組込みポリシーを常に、又は頻繁に適用することができる。一実施形態では、組込みポリシーは主に、高位スクリプトのインスツルメンテーションのためのものである。
【００９０】
高位スクリプトとは、実行されたときに別のＪａｖａＳｃｒｉｐｔコード又はＨＴＭＬ文書ピースを生成するスクリプトを指す。一実施形態では、実行時生成コード及び文書ピースが、インスツルメンテーションプロセスを介して適切に処理される。実行時生成コード及び文書ピースは分析及び書換えのために静的に利用可能ではないので、２つのユーティリティ関数ｉｎｓｔｒｕｍｅｎｔＪＳ及びｉｎｓｔｒｕｍｅｎｔＨＴＭＬが導入され、実行時までインスツルメンテーションが遅延される。一実施形態では、こうした２つの関数は１つの引数を取り、その引数をそれぞれＪａｖａＳｃｒｉｐｔ表現又はＨＴＭＬ表現として評価する。一実施形態では、こうした関数の戻り結果は、対応するＪａｖａＳｃｒｉｐｔ表現又はＨＴＭＬ表現のインスツルメント後バージョンである。一実施形態では、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクト（又はインターネットエクスプローラでのＡｃｔｉｖｅＸＯｂｊｅｃｔ）が使用されて、実行時生成ＪａｖａＳｃｒｉｐｔコード及びＨＴＭＬ文書がプロキシに送信され、そのインスツルメント後の結果が受信される。ＸＭＬＨｔｔｐＲｅｑｕｅｓｔがＡＪＡＸ（Ａｓｙｎｃｈｒｏｎｏｕｓ  ＪａｖａＳｃｒｉｐｔ  ａｎｄ  ＸＭＬ）で使用されることについて広く知られているが、本明細書ではＸＭＬＨｔｔｐＲｅｑｕｅｓｔが同期式に使用されることに留意されたい。
【００９１】
得られる微細な区別は、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔが現文書の発信元と同じドメイン内にあるサーバと通信することだけに制限されることである。一実施形態では、現文書のホストをターゲットとする特別に符号化されたＨＴＴＰ要求が、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔへの引数として使用される。すべてのＨＴＴＰ要求がプロキシを通過するので、プロキシは、特殊経路符号化に基づいて、関連する要求を代行受信し、インスツルメンテーションの結果で応答することができる。表４２は、読むことを容易にするために一実施形態による実際の実装から単純化されたキーコードのスニペットを示す。
【表４３】
0005478513.tif 000044
ｉｎｓｔｒｕｍｅｎｔＪＳ及びｉｎｓｔｒｕｍｅｎｔＨＴＭＬの使用が、以下でより詳細説明される。
【００９２】
ｗｉｎｄｏｗ．ｅｖａｌ、ｏｂｊｅｃｔ．ｅｖａｌ
こうした関数は、引数を親オブジェクトのコンテキスト内のＪａｖａＳｃｒｉｐｔ表現として解釈する。例えば、表４３に示される以下の例
【表４４】
0005478513.tif 000045
は、表４４に示されるものと同等である。
【表４５】
0005478513.tif 000046
このようなコードの書換えを処理するために、一実施形態では、ｉｎｓｔｒｕｍｅｎｔＪＳを内部で呼び出し、インスツルメント後文字列をｅｖａｌに戻す置換アクションでｅｖａｌが置換される。一実施形態では、ＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレート及びｄＦｕｎｃＲｅｐｌａｃｅｍｅｎｔテンプレートを適用してこのポリシーを生成することができる。
ＨＴＭＬＳｃｒｉｐｔＥｌｅｍｅｎｔオブジェクトのプロパティに対する割当て
以下の例でのｅｌ．ｔｅｘｔに対する割当てにより、ＪａｖａＳｃｒｉｐｔコードが実行される。
【表４６】
0005478513.tif 000047
一実施形態では、ＨＴＭＬＳｃｒｉｐｔＥｌｅｍｅｎｔオブジェクトのいくつかのプロパティ（例えば、ｉｎｎｅｒＨＴＭＬ、ｉｎｎｅｒＴｅｘｔ、ｔｅｘｔＣｏｎｔｅｎｔ、ｔｅｘｔ）に対する割当てにより、ＪａｖａＳｃｒｉｐｔコードの実行をトリガすることができる。そのような実行時生成ＪａｖａＳｃｒｉｐｔコードを適切にインスツルメントするために、一実施形態では、ＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇ及びｄＷｒｉｔｅＡｃｃｅｓｓＦｉｌｔｅｒｉｎｇが適用され、ｉｎｓｔｒｕｍｅｎｔＪＳがフィルタリング関数から呼び出される。
【００９３】
ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ、ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅｌｎ
ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ及びｄｏｃｕｍｅｎｔ．ｗｒｉｔｅｌｎは、埋込みＨＴＭＬ文書ピースを生成し、埋込みＨＴＭＬ文書ピースは、例えば＜ｓｃｒｉｐｔ＞タグ及びイベントハンドラの使用により、ＪａｖａＳｃｒｉｐｔコードを含むことができる。例えば、表４６に示される例は、表４７に示されるものと同等である。
【表４７】
0005478513.tif 000048
【表４８】
0005478513.tif 000049
このような実行時生成ＨＴＭＬをインスツルメントするために、隣接するｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ及び／又はｄｏｃｕｍｅｎｔ．ｗｒｉｔｅｌｎに対する引数がまとめられ、蓄積された結果が、ｉｎｓｔｒｕｍｅｎｔＨＴＭＬを使用する書換えプロセスに供給される。
【００９４】
Ｆｕｎｃｔｉｏｎオブジェクトの作成
Ｆｕｎｃｔｉｏｎオブジェクトの作成によってＪａｖａＳｃｒｉｐｔコードを導入することができる。表４８に示される例は、表４９に示されるものと同等である。
【表４９】
0005478513.tif 000050
【表５０】
0005478513.tif 000051
したがって、一実施形態では、関数オブジェクト作成のインスツルメンテーションが、（ｎｅｗｏｂｊ）書換えテンプレートを適用することによって処理される。書換え済みコードは、Ｆｕｎｃｔｉｏｎコンストラクタの第２引数をｉｎｓｔｒｕｍｅｎｔＪＳに渡し、戻り結果を使用して関数オブジェクトを作成する。
【００９５】
ユーザ通知
一実施形態では、ポリシー違反時に、効果的なユーザ対話が行われる。ダイアログボックスなどの単純な通知機構は、あるユーザにとっては、十分に親しみやすいようには見えず、又は参考となるようには見えないことがある。大部分のポリシー違反時に、通知メッセージが、レンダリングされたウェブコンテンツの上に重なることがある。図２７は、ユーザインターフェース内のウェブコンテンツの上に重なるユーザ警報の一実施形態を示す。図示される実施形態では、重ね合わされた警報２７００がユーザの注意を引き、問題のあるコンテンツに対するユーザのアクセスを不能にし、ユーザが通知メッセージをレンダリングされたコンテンツと比較することによってより良好に状況を評価することを可能にする。
【００９６】
一実施形態では、ユーザ警報をもたらすインスツルメンテーションが、ブラウザによって実施される。しかし、一実施形態では、インスツルメンテーションが、ブラウザとインターネットとの間に置かれるプロキシによって実施される。この場合、通知機構が完全にＨＴＭＬで実装される。一実施形態では、重ね合せ効果を可能にするために、ＪａｖａＳｃｒｉｐｔとカスケーディングスタイルシート（ＣＳＳ）との組合せを使用して、所望のフォント、色、可視性、不透明度、及びレンダリングエリアを実現することができる。
【００９７】
しかし、そのような機能を可能にする実施形態はＨＴＭＬ文書ツリーを操作することによって働くので、興味深い問題が生じる。この操作は通常、例えばアンロードイベントハンドラを使用することによって、文書全体がロードされた後に行われる。遺憾ながら、ポリシー違反は、オンロードイベントが生じる前に行われることがある。この場合、様々なコード及びエラーシナリオに基づいて、「フォールバック」機構の実施形態を適用することができる。
【００９８】
フォールバック機構の一実施形態は、ポリシー違反時に、通常のダイアログボックスを使用して直ちにユーザに通知することである。図２７に示される重ね合せ手法よりも親しみやすいようには見えないが、望ましいことに、ダイアログボックスのブロッキング性により、ユーザの命令を受け取るまで、それ以上のどんなコンテンツのレンダリングも遅延される。ユーザは、アクションを許可すること、アクションを抑制して残りのコンテンツに進むこと、又はレンダリングを完全に停止することを選ぶことができる。
【００９９】
フォールバック機構の別の実施形態を使用することができる。好ましくは、この実施形態は、例えばフィッシングサイトの識別時などの重大な違反に適用可能である。この機構は、それ以上のどんなコンテンツのレンダリングも停止し、例外を引き起こすことによって通知機構に直接的にジャンプする。
【０１００】
フォールバック機構のさらに別の実施形態を使用することができる。好ましくは、この実施形態は、ポップアップウィンドウなどの「軽い」違反に適用可能である。この実施形態では、フォールバック機構は、ポリシー違反アクションを抑制し、残りのコンテンツのレンダリングに進み、文書全体がロードされるときに通知を提示する。一実施形態では、通知のルックアンドフィールが保持される。しかし、コンテンツをロードするときに、複数のアクションが抑制されることがあり、したがって、レンダリングされたコンテンツは、注意深く適用されない場合、予想された通りのものではないことがある。
【０１０１】
上記の３つの機構が適していない特別なケースについて、フォールバック機構の別の実施形態を構成することができる。例えば、ポリシー違反がインラインドフレーム内のスクリプトによって引き起こされるとき、対応するレンダリングエリアが小さ過ぎる可能性があり、さらには隠される可能性があり、通知メッセージの表示が妨げられる。したがって、エラーを示すプロキシによって供給される特別なウェブページにユーザをリダイレクトすることによってエラーメッセージが提示される。
【０１０２】
上述の内部論理機構をポリシーライタに公開しないように、ユーティリティ関数ｎｏｔｉｆｙＰｏｌｉｃｙＶｉｏｌａｔｉｏｎ（）が、一様なエラー通知インターフェースとして提供される。このユーティリティ関数に異なるパラメータを供給することによって異なる挙動をトリガすることができる。
【０１０３】
例示的コンピュータシステム
機械可読媒体は、マシン（例えばコンピュータ）で可読な形式で情報を格納又は送信する任意の機構を含む。例えば、機械可読媒体は、読取り専用メモリ（「ＲＯＭ」）、ランダムアクセスメモリ（「ＲＡＭ」）、磁気ディスク記憶媒体、光学式記憶媒体、フラッシュメモリ装置などを含む。
【０１０４】
図２８は、本明細書に記載の動作のうちの１つ又は複数を実施することのできる例示的コンピュータシステムのブロック図である。図２８を参照すると、コンピュータシステム２８００は、例示的クライアント又はサーバコンピュータシステムを含むことができる。コンピュータシステム２８００は、情報を通信する通信機構又はバス２８１１と、バス２８１１に結合された、情報を処理するプロセッサ２８１２とを備える。プロセッサ２８１２はマイクロプロセッサを含むが、例えばペンティアム（登録商標）（Ｐｅｎｔｉｕｍ（登録商標））、パワーＰＣ（ＰｏｗｅｒＰＣ）、アルファ（Ａｌｐｈａ）などのマイクロプロセッサに限定されない。
【０１０５】
システム２８００は、プロセッサ２８１２で実行される情報及び命令を格納する、バス２８１１に結合されたランダムアクセスメモリ（ＲＡＭ）又は他の動的記憶装置２８０４（メインメモリと呼ばれる）をさらに備える。メインメモリ２８０４はまた、プロセッサ２８１２による命令の実行中に一時変数又は他の中間情報を格納するのに使用することができる。
【０１０６】
コンピュータシステム２８００はまた、プロセッサ２８１２に対する静的情報及び命令を格納する、バス２８１１に結合された読取り専用メモリ（ＲＯＭ）及び／又は他の静的記憶装置２８０６と、磁気ディスクや光ディスクとそれに対応するディスクドライブなどのデータ記憶装置２８０５とを備える。データ記憶装置２８０５は、情報及び命令を格納するバス２８１１に結合される。
【０１０７】
コンピュータシステム２８００は、コンピュータユーザに情報を表示するためにバス２８１１に結合された、陰極線管（ＣＲＴ）や液晶ディスプレイ（ＬＣＤ）などのディスプレイ装置２８２１にさらに結合することができる。情報及びコマンド選択をプロセッサ２８１２に通信するために、英数キー及び他のキーを含む英数入力装置２８２２をバス２８１１に結合することもできる。追加のユーザ入力装置は、方向情報及びコマンド選択をプロセッサ２８１２に通信し、ディスプレイ２８２１上のカーソル移動を制御するためにバス２８１１に結合された、マウス、トラックボール、トラックパッド、スタイラス、カーソル方向キーなどのカーソル制御機構２８２３である。
【０１０８】
バス２８１１に結合することのできる別の装置は、ハードコピー装置２８２４であり、ハードコピー装置２８２４は、紙、フィルム、類似のタイプの媒体などの媒体上に情報をマークするのに使用することができる。バス２８１１に結合するこのができる別の装置は、電話又はハンドヘルドパーム装置に通信する有線／ワイヤレス通信機能２８２５である。
【０１０９】
システム２８００の構成要素のいずれか又はすべてと、関連するハードウェアとを本発明で使用できることに留意されたい。しかし、コンピュータシステムの他の構成は、装置の一部又はすべてを含むことができることを理解されたい。
【０１１０】
本発明の多数の代替実施形態及び修正形態は、上記の説明を読んだ後の当業者には恐らく明らかとなるであろうが、例示によって図示し、説明したどんな特定の実施形態も、決して限定とみなされないものとすることを理解されたい。したがって、様々な実施形態の細部への参照は、本発明にとって不可欠とみなされる特徴のみをそれ自体の中で挙げる特許請求の範囲を限定しないものとする。
【図１】
0005478513.tif 000052
【図２】
0005478513.tif 000053
【図３】
0005478513.tif 000054
【図４】
0005478513.tif 000055
【図５】
0005478513.tif 000056
【図６】
0005478513.tif 000057
【図７】
0005478513.tif 000058
【図８】
0005478513.tif 000059
【図９】
0005478513.tif 000060
【図１０】
0005478513.tif 000061
【図１１】
0005478513.tif 000062
【図１２】
0005478513.tif 000063
【図１３】
0005478513.tif 000064
【図１４】
0005478513.tif 000065
【図１５】
0005478513.tif 000066
【図１６】
0005478513.tif 000067
【図１７】
0005478513.tif 000068
【図１８】
0005478513.tif 000069
【図１９】
0005478513.tif 000070
【図２０】
0005478513.tif 000071
【図２１】
0005478513.tif 000072
【図２２】
0005478513.tif 000073
【図２３】
0005478513.tif 000074
【図２４】
0005478513.tif 000075
【図２５】
0005478513.tif 000076
【図２６】
0005478513.tif 000077
【図２７】
0005478513.tif 000078
【図２８】
0005478513.tif 000079