(57)【要約】  プログラムの計装を使用して、文書内の組み込みスクリプトの挙動を制約するための方法及び装置が本明細書で開示されている。一実施形態では、この方法は、スクリプトプログラムが組み込まれた文書をダウンロードすることと、スクリプトプログラムを検査することと、スクリプトの実行によって生じる挙動が安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠するようにスクリプトプログラムを書き換えることとを含む。スクリプトプログラムは、自己修正型コード（例えば動的に生成されたスクリプト）を備える。【選択図】図３Ａ
2009541898.tif 000002
【特許請求の範囲】
【請求項１】
自己修正型コードを含むスクリプトプログラムが内部に組み込まれた文書をダウンロードするステップと、
前記スクリプトプログラムを検査するステップと、
前記スクリプトの実行によって生じる挙動が安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠するように前記スクリプトプログラムを書き換えるステップと、
を含む方法。
【請求項２】
セキュリティポリシーを実施するためのポリシー管理モジュールと、
前記セキュリティポリシーに基づいて、書換えプロセスを実行して文書に組み込まれたスクリプトを書き換える書換えモジュールであり、前記スクリプトプログラムが自己修正型コードを含み、前記スクリプトの実行によって生じる挙動が安全性及びセキュリティ要件に準拠するように、前記書換えプロセスが１つ又は複数のポリシーに基づいて前記文書を計装することで前記文書内の前記スクリプトを制御する、書換えモジュールと、
書換え中に前記スクリプトに追加された命令を解釈するための解釈モジュールと、
を含むプロキシ。
【請求項３】
命令を格納する１つ又は複数のマシン読み取り可能媒体を有する装置であって、マシンによって実行された場合、前記命令が、
自己修正型コードを含むスクリプトプログラムが内部に組み込まれた文書のダウンロードと、
前記スクリプトプログラムの検査と、
前記スクリプトの実行によって生じる挙動が安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠させるための前記スクリプトプログラムの書換えと、
を前記マシンに実行させる、装置。
【発明の詳細な説明】
【優先権主張】
【０００１】
[0001]本特許出願は、２００６年６月２６日出願の「Ｐｒｏｇｒａｍ  Ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｃｏｎｓｔｒａｉｎｉｎｇ  ｔｈｅ  Ｂｅｈａｖｉｏｒ  ｏｆ  Ｅｍｂｅｄｄｅｄ  Ｓｃｒｉｐｔ  ｉｎ  ＨＴＭＬ  Ｄｏｃｕｍｅｎｔｓ」という名称の、対応する仮特許出願第６０／８１６６７９号に対する優先権を主張し、参照によりこれを組み込むものとする。
【発明の分野】
【０００２】
[0002]本発明は、コンピュータプログラミングの分野に関し、より具体的に言えば、本発明は、文書（例えばＨＴＭＬ文書）内の組み込みスクリプトの挙動を制御（例えば制約）することに関する。
【発明の背景】
【０００３】
[0003]ＪａｖａＳｃｒｉｐｔは、ウェブページを構築する際に一般的に使用されるツールになってきている。ＪａｖａＳｃｒｉｐｔプログラムは、本来、ＨＴＭＬ文書内に組み込まれてクライアントマシン上で実行されるモバイルコードの形である。ＪａｖａＳｃｒｉｐｔプログラムは、Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ（ＤＯＭ）及び他のブラウザ機能の支援により、クライアントシステムへの制約付きアクセス権を取得し、ウェブページの機能及び外観を向上させることができる。
【０００４】
[0004]他の形のモバイルコードの場合のように、ＪａｖａＳｃｒｉｐｔプログラムは、悪意ある当事者達が悪用するための潜在的なセキュリティの脆弱性及び抜け穴を案内している。単純な例として、ＪａｖａＳｃｒｉｐｔは、しばしば、クライアント側で新しいウィンドウを開くために使用される。この機能により、普通のＨＴＭＬのみで提供される以上のある程度の制御が与えられ、これによって新しいウィンドウは、カスタマイズされたサイズ、位置、及び構成要素（例えばメニュー、ツールバー、ステータスバー）を有することができる。残念ながらこの機能は、望ましくないコンテンツの迷惑なポップアップを生成させるために相当に悪用されてきており、そのうちの一部は、ウェブユーザの立場からは「制御」が困難である（例えば、スクリーンの境界外の制御ボタン、閉じる際の瞬時の再生成）。さらに深刻なことに、この機能は、フィッシング攻撃を起動するためにも悪用されてきており、ウェブページの生成元に関する重要な情報がユーザには非表示であり（例えば非表示のロケーションバー）、ユーザを騙して悪意あるコンテンツを信じ込ませるために偽情報が組み込まれる（例えば偽のロケーションバー）。
【０００５】
[0005]他の例として、ＪａｖａＳｃｒｉｐｔは、しばしば、「クッキー」としてクライアントマシン側で有用な情報（例えば、ウェブサービスへのパスワード）を格納及び取り出すために使用される。こうした情報は時には重要であるため、ブラウザはウェブページの生成元に基づいて、クッキーへのアクセスを制限する。例えば、ａｔｔａｃｋｅｒ．ｃｏｍからのＪａｖａＳｃｒｉｐｔコードは、ｍｙｂａｎｋ．ｃｏｍによって設定されたクッキーを読み取ることができないことになる。残念ながら、多くのウェブアプリケーションはＸＳＳの脆弱性を示し、悪意あるスクリプト片が、脆弱なアプリケーションによって生成されたウェブページに注入され得る。ブラウザは、注入されたスクリプトを、あたかも同じアプリケーションによって企図されたもののように解釈する。その結果、悪意あるスクリプトは、ブラウザの生成元ベースの保護をくぐり抜け、脆弱なアプリケーションによって設定されたクッキーへのアクセス権を取得することができる。
【０００６】
[0006]このようにして、一般にＪａｖａＳｃｒｉｐｔは、幅広い攻撃を起動するために悪用されてきた。この状況は、ウェブページをロードすることが、信頼できないコードの実行を必然的に伴うことをユーザが認識できないため、アプリケーションのダウンロードなどの他の形のモバイルコードよりも潜在的に悪いものである。
【０００７】
[0007]ＪａｖａＳｃｒｉｐｔ、ＤＯＭ、及びウェブブラウザは、何らかの基本的なセキュリティ保護を提供する。一般に使用されるものの中には、サンドボックス、同一生成元ポリシー、及び署名付きスクリプトがある。これらは、制限付きの（粗野な）保護を提供するだけである。たとえこれらの保護が完璧に実施されている場合であっても、攻撃の機会は数多く残されている。これらによって防止されない攻撃の代表的な例には、ＸＳＳ、フィッシング、及びリソースの悪用が含まれる。
【０００８】
[0008]ポップアップブロッカ及びＳｐｏｏｆＧｕａｒｄなどの、いくつかの別々のブラウザセキュリティツールも開発されている。これらの別々のソリューションは、特定の攻撃の種類に対してのみ保護を提供する。実際に、複数のソリューションをすべてまとめて配置するのは時として困難である。加えて、既存のツールの保護範囲を超えた攻撃も数多く存在する。それにもかかわらず、これらのツールで使用される考え方及び発見的方法は、計装に有用なセキュリティポリシーを構築するために役立つ可能性が高い。
【０００９】
[0009]ＪａｖａＳｃｒｉｐｔで作成されたものを含む、悪意あるモバイルコードに対するクライアント側の保護に関連したいくつかのスキームが提案されてきている。それらは、ダウンロードされたコードのセキュリティプロファイルに関して何らかのチェックを（例えば、既知の敵対するダウンロード可能プログラム、信頼できる及び信頼できないＵＲＬ、並びに疑わしいコードパターンに基づいて）実行し、チェックが失敗した場合にコードの実行を防止することによって、粗野な保護を提供するのみである。一部では、規則の集合に基づいて、潜在的な悪用に関するコードの内容もスキャンする。これらの従来の保護方法の中には、コードを書き換えるものはひとつもない。本発明の実施形態によって提供される保護は、その挙動に関するコードを検査し、ポリシーを順守するようにコードを書き換える方法であるため、よりきめの細かいものである。
【００１０】
[0010]前述の保護メカニズムは、すべてクライアント側に配置されるものである。サーバ側の保護も、特にコマンド注入攻撃との関連において研究されてきている。それらは、精通したプログラマがある種の脆弱性のないウェブアプリケーションを構築するのに役立つが、悪意あるコードがブラウザベースの攻撃を通じてクライアントに害を及ぼすのを防ぐことはできない。
【００１１】
[0011]ＪａｖａＳｃｒｉｐｔの形式化に関する既存の学術的な研究は、悪意ある活用を阻止するのとは反対に、プログラマが適切なコードを作成するのに役立つことに焦点を当てたものである。技術的な面から言えば、それらは、ＨＴＭＬ文書内に組み込まれた別々のフラグメントとしてではなく、従来のプログラム実行モデルを使用してＪａｖａＳｃｒｉｐｔプログラムを処理するものである。それらは、直接静的に使用できないＪａｖａＳｃｒｉｐｔコードの形であるがＪａｖａＳｃｒｉｐｔプログラム実行中に動的に生成される、より高位のスクリプトを対象としていない。
【００１２】
[0012]プログラムの計装は良く知られている。しかしながら、これらの従来の技法は、メモリの安全性と、デバッグ及びテストと、データ収集とを含む特定の問題を対象とするものである。それらはブラウザの安全性及びセキュリティの問題を対象としていない。加えて、それらはＨＴＭＬ文書内の組み込みＪａｖａＳｃｒｉｐｔの挙動を規制するのには十分ではない。
【発明の概要】
【００１３】
[0013]本明細書では、プログラムの計装を使用して、文書内の組み込みスクリプトの挙動を制約するための方法及び装置が開示されている。一実施形態では、この方法は、スクリプトプログラムが組み込まれた文書をダウンロードすることと、スクリプトプログラムを検査することと、スクリプトの実行によって生じる挙動が安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠するようにスクリプトプログラムを書き換えることとを含む。スクリプトプログラムは、自己修正型コード（例えば動的に生成されたスクリプト）を備える。
【００１４】
[0014]本発明は、本発明の様々な実施形態の以下の詳細な説明及び添付の図面から、より完全に理解されるであろうが、これらは本発明を特定の実施形態に限定するものでなく、単に説明及び理解するためのものである。
【発明の詳細な説明】
【００１５】
[0031]文書内の組み込みスクリプトの挙動を制約するための、プログラムの計装を使用するための方法及び装置について説明する。一実施形態では、文書はＨＴＭＬ文書を含む。本発明の諸実施形態は、ＪａｖａＳｃｒｉｐｔの特定の実行モデルの処理と、組み込みスクリプトの自己修正機能と、いくつかの実際的なポリシーの問題とを含むがこれらに限定されることのないいくつかの態様において、既存のプログラムの計装とは異なる。
【００１６】
[0032]一実施形態では、プログラムの計装を使用する挿入されたセキュリティチェック及びダイアログ警告を使用して、潜在的に悪意ある挙動が識別され、ユーザに対して明らかにされる。ＪａｖａＳｃｒｉｐｔプログラムは一般的には非常にサイズが小さく、ほとんどのウェブページにとってパフォーマンスは問題でないため、特別な計算のオーバヘッドは通常許容されうる。
【００１７】
[0033]以下の説明では、本発明のより完全な説明を提供するために、多数の細部が示される。しかしながら、当業者であれば、本発明がこれらの特定の細部なしでも実施可能であることが明らかとなろう。他の例では、本発明を不明瞭にするのを避けるために、周知の構造及びデバイスは、詳細にではなくブロック図形式で示されている。
【００１８】
[0034]以下の詳細な説明の一部は、コンピュータメモリ内のデータビットでの演算のアルゴリズム及びシンボリック表現に関して提示されている。これらのアルゴリズム的な記述及び表現は、データ処理分野の当業者によって、彼等の作業の要旨を他の当業者に最も効果的に伝搬するために、使用される手段である。本明細書において及び一般的には、アルゴリズムとは、所望の結果につながる自己矛盾のない一連のステップであると考えられる。これらのステップは、物理量の物理的操作を必要とするものである。通常、これらの量は、格納、転送、結合、比較、及びその他の方法での操作が実行可能な電気又は磁気信号の形を取るが、必須ではない。時には、主に一般的な用法という理由から、これらの信号をビット、値、要素、シンボル、文字、項、数などと言い表すことが便利であることが証明されている。
【００１９】
[0035]しかしながら、これら及び同様の用語のすべてが、適切な物理量に関連付けられており、これらの量に適用された単なる便宜上のラベルであることに留意されたい。特に具体的に示されていない限り、以下の考察から明らかなように、説明全体を通じて、「処理」又は「計算」又は「決定」又は「表示」などの用語を使用する考察は、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表されるデータを、コンピュータシステムのメモリ又はレジスタ又は他のこうした情報の格納、伝送、又は表示デバイス内の物理量として同様に表される他のデータに、操作及び変換する、コンピュータシステム又は同様の電子計算デバイスの、アクション及びプロセスを言い表すことを理解されよう。
【００２０】
[0036]本発明は、本明細書で動作を実行するための装置にも関する。この装置は、特に、必要な用途のために構築することが可能であるか、又はコンピュータに格納されたコンピュータプログラムによって選択的に作動又は再構成される汎用コンピュータを備えることができる。こうしたコンピュータプログラムは、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、及び光磁気ディスクを含む、任意のタイプのディスク、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光カード、或いは、電子命令を格納するために好適であり、それぞれがコンピュータシステムバスに接続された、任意のタイプの媒体などであるが、これらに限定されることのない、コンピュータ読み取り可能記憶媒体に格納することができる。
【００２１】
[0037]本明細書に提示されるアルゴリズム及び表示は、本質的にいずれかの特定のコンピュータ又は他の装置に関するものではない。本明細書の教示に従ったプログラムと共に様々な汎用システムを使用することが可能であるか、又は、必要な方法ステップを実行するためのより特殊な装置を構築することが便利であると証明することができる。多様なこれらのシステムに必要な構造は、以下の説明から明らかとなろう。加えて本発明は、いずれかの特定のプログラミング言語に関連して説明されるものではない。当然ながら、本明細書で説明される本発明の教示を実施するために、多様なプログラミング言語が使用可能である。
【００２２】
[0038]マシン読み取り可能媒体には、マシン（例えばコンピュータ）によって読み取り可能な形で情報を格納又は伝送するための任意のメカニズムが含まれる。例えば、マシン読み取り可能媒体には、読み取り専用メモリ（「ＲＯＭ」）、ランダムアクセスメモリ（「ＲＡＭ」）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、電気、光、音波、又は他の形の伝播信号（例えば搬送波、赤外線信号、デジタル信号など）などが含まれる。
【００２３】
ＪａｖａＳｃｒｉｐｔ実行モデルの概要
[0039]ＪａｖａＳｃｒｉｐｔの実行モデルは、他のプログラミング言語のそれとはまったく異なる。典型的なプログラミング言語は入力を取り込んで出力を生成し、恐らくは実行中に生成される何らかの副次作用を伴う。ＪａｖａＳｃｒｉｐｔの場合、プログラムそれ自体が計算中の「出力」内部に組み込まれる。図１は、ＨＴＭＬ文書に組み込まれた一片のスクリプトの例を示す。このスクリプトは、関数ｐａｒｓｅＮａｍｅ（定義は図示せず）を使用して、クッキー（ｄｏｃｕｍｅｎｔ．ｃｏｏｋｉｅ）からユーザ名を取得し、その後、何らかのテキストでスクリプトノードを更新するためにＤＯＭ  ＡＰＩ  ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅを呼び出す。
【００２４】
[0040]本明細書に記載された技法は、この実行モデルを反映している。一実施形態では、スクリプトは、ＨＴＭＬ文書に対応する何らかのツリー構造文書に組み込まれたものとして処理される。動作上のセマンティクスでは、スクリプト片が解釈され、生成された文書片に置き換えられる。文書全体にアクティブなスクリプトが存在しない場合、解釈は停止する。基本的に、この実行モデルは自己修正型コードの特定の実施形態である。
【００２５】
プログラム計装の概要
[0041]図３Ａは、文書に組み込まれたスクリプトプログラムを計装するためのプロセスの一実施形態を示す流れ図である。このプロセスは、ハードウェア（例えば回路、専用論理）、ソフトウェア（汎用コンピュータシステム又は専用マシン上で実行されるようなもの）、又はその両方の組み合わせを含みうる処理論理によって実行される。
【００２６】
[0042]図３Ａを参照すると、プロセスは、内部にスクリプトプログラムが組み込まれた文書をダウンロードする処理論理によって開始される（処理ブロック３０１）。一実施形態では、文書のダウンロードはクライアントのブラウザによって実行される。一実施形態では、文書はＨＴＭＬ文書である。一実施形態では、スクリプトプログラムはＪａｖａＳｃｒｉｐｔである。他の実施形態では、スクリプトプログラムはＥＣＭＡスクリプトベースのプログラムである。一実施形態では、スクリプトプログラムは自己修正型コードを含む。自己修正型コードは、動的に生成されるＪａｖａＳｃｒｉｐｔを含むことができる。
【００２７】
[0043]文書をダウンロードした後、処理論理は文書内のスクリプトプログラムを検査する（処理ブロック３０２）。
【００２８】
[0044]検査の結果に基づいて、処理論理は、スクリプトの実行の結果として生じる挙動が、安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠するように、スクリプトプログラムを書き換える（処理ブロック３０３）。一実施形態では、スクリプトプログラムの書換えは、オンデマンドの直構文型（ｓｙｎｔａｘ−ｄｉｒｅｃｔｅｄ）書換えの実行を含む。
【００２９】
[0045]一実施形態では、スクリプトプログラムの書換えは、スクリプトプログラムへのランタイムチェックの挿入を含む。一実施形態では、ランタイムチェックはセキュリティチェックを含む。他の実施形態では、ランタイムチェックはユーザ警告を含む。一実施形態では、ランタイムチェックは、ランタイム時に実行された場合に、文書の評価動作の実行に応答して、計装プロセスを呼び出すことでスクリプトプログラムを文書内に計装させる、コードを含む。
【００３０】
[0046]一実施形態では、スクリプトプログラムの書換えは、ランタイム実行中にポリシーモジュールを介してアクションをリダイレクトするためのコードを追加することを含む。一実施形態では、このプロセスにはオプションで、ポリシーモジュールを介してアクションをリダイレクトするためのコードが追加されたランタイムのアクションに対して、置換アクションを実行するポリシーモジュールが含まれる。
【００３１】
[0047]一実施形態では、スクリプトプログラムの書換えは、文書を抽象構文ツリーに解析することと、抽象構文ツリーでの書換えを実行することと、抽象構文ツリーから計装済みスクリプトコード及び計装済み文書を生成することとを含む。
【００３２】
[0048]一実施形態では、１つ又は複数のポリシーが動的に修正可能である。一実施形態では、この１つ又は複数のポリシーが編集オートマトンとして表される。一実施形態では、少なくとも１つのポリシーが、スクリプトプログラム内の第１のアクションシーケンスを、第１のアクションシーケンスとは異なる第２のアクションシーケンスへと転送する。一実施形態では、ポリシーは、複数のポリシーを１つに組み合わせるポリシーを含む。
【００３３】
[0049]一実施形態では、プロセスは、現在の状態及び完全な推移関数を含み且つあるアクションでチェック関数を呼び出す、ポリシーの編集オートマトンに関連する状態を維持することと、それに応答してオートマトンの状態を前進させ、そのアクションに置換アクションを提供することとを、さらに含む。
【００３４】
高位スクリプト
[0050]「ランタイム」時にＪａｖａＳｃｒｉｐｔコードによって生成された文書片には、内部に組み込まれたＪａｖａＳｃｒｉｐｔコードがさらに存在する可能性がある。これによって、（他のスクリプトを生成するスクリプトの場合のように）本明細書で高位スクリプトと呼ばれる、自己修正型コードの形が生じる。例えば、上記のＤＯＭ  ＡＰＩ  ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅは、プレーンテキストの引数のみならず、スクリプトノードを含む可能性のある任意ＨＴＭＬ文書の引数を許可する。これらの「ランタイム」生成スクリプトノードは、解釈されると、さらに「ランタイム」生成スクリプトノードを生成することができる。実際に、スクリプト生成の無限の繰り返しをプログラミングすることができる。
【００３５】
[0051]高位スクリプトを備えるＨＴＭＬ文書の挙動は、時折、理解するのが困難である。例えば、図２の２片のコードフラグメントは同じように見えるが、異なる結果を生成する。この例では、整数から文字列への暗黙の変換が存在し、＋は文字列連結であり、組み込みスクリプトの終了タグ＜／ｓｃｒｉｐｔ＞は、パーサがこれを外部スクリプトフラグメントを終了するためのものであると誤解しないように、意図的に分けられている。この言語仕様では、高位スクリプトの評価及び実行順序は明確に指定されていない。したがって、本明細書に記載された動作上のセマンティクスに提供されているような厳密なアカウントを有することが有用である。
【００３６】
[0052]さらに重要なことには、計装プロセスは、コードの実行前にすべての関連動作を効果的に識別できず、一部の動作は、計算結果、ユーザ入力、及びＵＲＬからロードされた文書を含む、「ランタイム」時まで明らかではない文字列引数内に組み込まれている可能性があるため、高位スクリプトを悪用して既存のプログラム計装を回避（ｃｉｒｃｕｍｖｅｎｔ）することができる。加えて、例えば一部のタグ文字の特殊な符号化によって、分析及びフィルタに対してこうした組み込みスクリプトを不明瞭にする方法が数多く存在する。
【００３７】
[0053]一実施形態では、書き換えられたスクリプトプログラムは文書の計装済みバージョンの一部であり、この文書の計装済みバージョンは非表示スクリプトを含み、ランタイム中に非表示スクリプトが生成された場合に書き換えられる。一実施形態では、高位スクリプトの計装は、図３Ｂで例証されるように、特別レベルの間接的動作（ｉｎｄｉｒｅｃｔｉｏｎ）を介して処理される。計装時、ｌｏａｄ（ｕｒｌ）などの明示的セキュリティイベントは、関係するセキュリティチェック及び（ｓａｆｅ−ｌｏａｄ（ｕｒｌ）によって抽象化された）ユーザ警告を実行するコードによって、直接書き換えられる。しかしながら、生成されたスクリプトｄｏｃ内には他のイベントが隠されている可能性もある。静的に困難なｄｏｃのコンテンツの検証はせずに、ｄｏｃは何らかの特殊コードｉｎｓｔｒに逐語的に送られる。「ランタイム」時に実行された場合、この特殊コードは、ｄｏｃの評価結果に関して必要な検査を実行するために再度計装プロセスを呼び出す。
【００３８】
[0054]こうした処置は、本質的に、「ランタイム」まで計装タスクの一部を遅延させ、オンデマンドで実行させる。コード及び計装の他の構成要素は、ブラウザ内のＪａｖａＳｃｒｉｐｔインタプリタを変更すること、或いは回避又は誤用することができない綿密に作成された（しかし正規の）ＪａｖａＳｃｒｉｐｔコードを使用することのいずれかによって、代替の諸実施形態で実施可能であることに留意されたい。
【００３９】
[0055]ＪａｖａＳｃｒｉｐｔプログラムの場合、時折、違反を正確に特徴付けることが困難である。例えば、あるウェブページが、異なるドメインからの文書のロードを試みると想定する。これは、予測されるリダイレクト又はＸＳＳ攻撃の兆候のいずれかである可能性がある。こうした状況では、通常、ユーザが判断するために関連する情報をユーザに提示することが望ましい。
【００４０】
[0056]一実施形態では、即時に実行を停止するのとは対照的に、疑わしい挙動に関してユーザに指示するためにスクリプトが修正される。適切であれば（例えば、境界外ウィンドウの場合）、コードのセマンティクスは（例えば、位置引数を「ラップ」することによって）変更される。一実施形態では、こうしたポリシーを表すために（セキュリティオートマトンよりもより表現豊かな）編集オートマトンが使用され、本明細書で説明される計装方法は、編集オートマトンの形でポリシーを実施するように設計される。
【００４１】
[0057]ＪａｖａＳｃｒｉｐｔは幅広く使用されているため、すべての状況について固定されたポリシーセットを提供することは困難である。カスタマイズされたポリシーの方がかなり望ましく、新しいポリシーに対処する場合、書換えメカニズムに対する変更がないはずである。一実施形態では、ポリシーの詳細に関係なく、同じ種類の書換えが実行される。一実施形態では、書換えによって、固定されたポリシーインターフェースを介してポリシーを参照するコードが生成される。
【００４２】
[0058]さらに、ＪａｖａＳｃｒｉｐｔ及びブラウザセキュリティは、多くの緩やかに結合された問題の混合である。したがって、有用なポリシーは、典型的には複数の構成要素ポリシーの組み合わせである。
【００４３】
[0059]一実施形態では、高位スクリプトを処理するための特殊コードの場合と同様に、ポリシー管理の実施は、ＪａｖａＳｃｒｉｐｔインタプリタの変更、又は正規のＪａｖａＳｃｒｉｐｔコードの使用の、いずれかによって実行される。後者の場合、実施が誤用又は回避できないことを保証するために、特別な注意が与えられる可能性がある。
【００４４】
ＣｏｒｅＳｃｒｉｐｔ
[0060]一実施形態では、抽象言語ＣｏｒｅＳｃｒｉｐｔを使用して、文書内の組み込みスクリプトプログラムの挙動を制約する。ＣｏｒｅＳｃｒｉｐｔは、ＪａｖａＳｃｒｉｐｔの抽象バージョンのモデルである。ＣｏｒｅＳｃｒｉｐｔの実施の一実施形態について、以下で説明する。
【００４５】
[0061]より具体的に言えば、ＣｏｒｅＳｃｒｉｐｔは、以下の計装方法の細部を説明するための方法を提供する。具体的には、高位スクリプト及び文書へのその組み込みを中心に、動作上のセマンティクスがＣｏｒｅＳｃｒｉｐｔに与えられる。オブジェクトは直交するため、本発明を不明瞭にするのを避けるために、このモデルから省略されている。オブジェクトの追加によって、計装に対するいかなる新しい困難も提示されないことに留意されたい。
【００４６】
[0062]ＣｏｒｅＳｃｒｉｐｔの構文の一実施形態が、図４に示されている。図４を参照すると、シンボル［  ］が、ＣｏｒｅＳｃｒｉｐｔ構文の一部としてではなく、メタ言語の括弧として使用されている。
【００４７】
[0063]一実施形態では、構文は以下のように示される。完全な「ワールド」Ｗは４タプル（Σ，χ，Ｂ，Ｃ）である。
【００４８】
[0064]第１の要素Σは文書バンクであり、ＵＲＬ  ｌから文書Ｄへのマッピングである。一実施形態では、文書バンクはインターネットに対応する。第２の要素χは変数バンクであり、公式パラメータ
【数１】
2009541898.tif 000003
を使用して、グローバル変数ｘを文書Ｄに、関数ｆをスクリプトプログラムＰに、マッピングする。第３の要素Ｂはブラウザであり、複数のウィンドウからなる可能性があり、各ウィンドウは参照しやすくするためのハンドルｈ、コンテンツとしての文書Ｄ、及び文書の出所にマークを付けるドメイン名ｄを有する。第４の要素Ｃはクッキーバンクであり、ドメイン名を文書の形でクッキーにマッピングする（各ドメインはそれ独自のクッキーを有する）。一実施形態では、ドメイン名ｄ、パスｐ、及びハンドルｈをモデル化するために文字列が使用される。ＵＲＬ  ｌは、ドメイン名ｄ及びパスｐのペアである。ＵＲＬと文字列との間の暗黙の変換が想定される（当分野では周知であり、本発明を不明瞭にしないように暗黙に実施される）。
【００４９】
[0065]一実施形態では、文書ＤはＨＴＭＬ文書に対応する。ＪａｖａＳｃｒｉｐｔでは、すべての種類の文書が、＜ｓｃｒｉｐｔ＞及び＜ｅｍ＞などのＨＴＭＬタグを使用して文字列として組み込まれる。すなわち、文書は、プログラム構造によって文字列として均一に取り扱われるが、解釈される場合、プレーン文字列とは異なるように解析される。ＣｏｒｅＳｃｒｉｐｔ内の文書は、異なる種類の文書が構文的に異なるように作成され、解析を暗黙にすることを除いて、これを反映する。一実施形態では、文書は、プレーン文字列（ｓｔｒｉｎｇ）、一片のスクリプト（ｊｓ  Ｐ）、又は、サブ文書のベクトルで構成されるフォーマット化された文書
【数２】
2009541898.tif 000004
の、３つの構文上の形のうちのいずれか１つである。値文書Ｄｖは、スクリプトを含まない文書である。構文内の数個の共通ＨＴＭＬフォーマットタグはＦとしてリスト表示され、複数文書の並置を表すために新しいタグｊｕｘが導入される（これによってセマンティクスの提示が簡略化される）。
【００５０】
[0066]一実施形態では、スクリプトプログラムＰは、主に、ノーオペレーション、割り当て、順序付け、条件付き、ｗｈｉｌｅループ、及び関数呼び出しを含む、共通制御構造で構成される。加えて一実施形態では、アクションａｃｔ（Ａ）は、本明細書で説明される計装プロセスによって識別及び書換えされることになる、セキュリティ関連動作である。さらに、高位スクリプトはｗｒｉｔｅ（Ｅ）を使用してサポートされ、ここでＥは、「ランタイム」時に追加のスクリプトを含む可能性がある文書を評価する。
【００５１】
[0067]数式Ｅは、変数ｘ、文書Ｄ、及び他の動作ｏｐ
【数３】
2009541898.tif 000005
を含む。一実施形態では、文字列の連結及び比較などの副次作用のない共通動作をカバーするために、抽象ｏｐ構造が使用される。一実施形態では、ブールは明示的にモデル化されず、代わりに、特殊な文書（文字列）ｆａｌｓｅ及びｔｒｕｅでシミュレートされる。
【００５２】
[0068]数個のアクションＡは、実証のために明示的にモデル化される。アクションｎｅｗＷｉｎ（ｘ，Ｅ）は、コンテンツ文書としてＥを使用して新しいウィンドウを作成し、フレッシュハンドルは新しいウィンドウに割り当てられ、ｘに格納される。アクションｃｌｏｓｅＷｉｎ（Ｅ）は、ハンドルＥを有するウィンドウを閉じる。アクションｌｏａｄＵＲＬ（Ｅ）は、ＵＲＬ  Ｅから新しい文書をロードするように現在のウィンドウに指示する。アクションｒｅａｄＣｋｉ（ｘ）は、現在のドメインのクッキーをｘに読み込む。アクションｗｒｉｔｅＣｋｉ（Ｅ）は、現在のドメインのクッキーにＥを書き込む。他のすべての潜在的なアクションは、汎用
【数４】
2009541898.tif 000006
として抽象化することができる。値アクションＡｖは、文書引数のみを備えたアクションである。アクションに対するいくつかの引数は、ウィンドウハンドル又はクッキーコンテンツなどの結果を格納するための変数である。こうした引数は、計装に影響を与えないため、値アクションで「＿」に置き換えられる。
【００５３】
[0069]図５は、ビッグステップスタイルでの数式のセマンティクスの一実施形態を示す。「ランタイム」時に数式は文書を評価するが、必ずしも「値文書」ではない。図５を参照すると、いくつかの規則が示されている。規則（２）が示すように、Ｄは数式評価中に組み込みスクリプトについて検査されない。規則（３）では、
【数５】
2009541898.tif 000007
は、ｏｐの対応するメタレベル計算を言い表すために使用される。
【００５４】
[0070]アクションは、図５に示されるようにアクションに価値を付けるために評価される。具体的には、規則（９）は、スクリプトが組み込まれた文書を含む任意の文書Ｄでクッキーを作成できることを示す。したがってプログラムは、後で使用するために、組み込みスクリプトをクッキー内に格納することができる。以下に示される計装は、この挙動の下で堅実となる。
【００５５】
[0071]図６は、スモールステップスタイルでのワールドの実行の一実施形態を示す。これは、実行と共に実施されるセキュリティアクション、並びにそれらの計装を考えた場合、より直感的である。
【００５６】
[0072]図６を参照すると、規則（１１）及び（１２）は、ワールドが実行時にどのように発展するかを記述するマルチステップ関係を定義する。これは、単一ステップ関係の反射的推移閉包として定義される。規則（１３）によって定義される単一ステップ関係は、ワールドが単一ステップでどのように展開するかを記述する。これは非決定性であり、任意のウィンドウが任意の時点でそのコンテンツ文書を前進させることができることを反映している。最後に規則（１４）は、図７で定義される何らかのマクロを使用して、ハンドルｈのウィンドウ内で文書を均一に前進させる。
【００５７】
[0073]マクロｆｏｃｕｓは、実行のフォーカスを識別する。これは文書をトラバースし、左端のスクリプト構成要素の位置を特定する。マクロｓｔｅｐＤｏｃは、引数文書のフォーカスが実行されるものと仮定して、次のステップに関して適切な文書を計算する。値文書（例えば文字列）ではｆｏｃｕｓ及びｓｔｅｐＤｏｃのケースは未定義である。これは、値文書内では何も実行できないことを示す。文書全体で何も実行できない場合、実行は終了する。
【００５８】
[0074]マクロｓｔｅｐは、ワールドでのステップ推移を計算する。ワールドＷがウィンドウｈ内の文書を前進させることによってステップを推移させていると想定し、ウィンドウｈ内の文書のフォーカス計算はＰであると想定する。ステップ推移後の結果ワールドは、ｓｔｅｐ（Ｐ，ｈ，Ｗ）となる。ｓｔｅｐを定義する場合、ヘルパーａｄｖ（Ｂ，ｈ，χ）はｓｔｅｐＤｏｃを使用してウィンドウｈ内の文書を前進させる。
【００５９】
[0075]セマンティクスは高位スクリプトの評価順序を示すため、図２の２つの例は自然に説明されることに留意されたい。一例として、
【数６】
2009541898.tif 000008
を採用する。ＣｏｒｅＳｃｒｉｐｔはすべてのＥｌを、それらのうちのいずれかに組み込まれたスクリプトを実行する前に評価し、図２内の第１のスクリプトフラグメントの挙動を説明する。Ｐは、
【数７】
2009541898.tif 000009
によって生成されたスクリプトが実行を完了した後に実行され、第２の挙動を説明する。
【００６０】
セキュリティポリシー
[0076]ブラウザベースの攻撃を迎え撃つために、様々なセキュリティポリシーを設計することができる。例えば、これらの攻撃には、無限数のウィンドウ（例えばポップアップ）のオープンが含まれる可能性があり、重要なクッキー情報を信頼できない当事者等（例えばＸＳＳ）に送信する可能性がある。
【００６１】
[0077]一実施形態では、２つの別々のモジュールによって、ポリシー管理及びコード書換えが実行される。この場合、ポリシーは書換えプロセスの知識なしに設計することができる。ポリシー設計者は、ポリシーが所望の保護を適切に反映していることを確認する。実施側では、書換えプロセスはポリシーインターフェースを介してポリシーにアクセスする。すべてのポリシーに、同じ種類の書換えが使用される。
【００６２】
[0078]書換え方法の諸実施形態が使用するポリシーフレームワーク及びポリシーインターフェースの一実施形態について、以下で説明する。
【００６３】
ポリシー表現
[0079]一実施形態では、ポリシーΠは編集オートマトンとして表される。一実施形態では、編集オートマトンはトリプル（Ｑ，ｑ０，δ）であり、ここでＱは状態の可算集合である可能性があり、ｑ０∈Ｑは初期状態（又は現在の状態）であり、δは、δ：Ｑ＊Ａ→Ｑ＊Ａ（シンボルＡは、ここではＣｏｒｅＳｃｒｉｐｔ内のアクションセットを示すために再使用される）の形を有する、完全推移関数である。推移関数δは、アクションの挿入、置換、及び抑止を指定することが可能であり、ここで抑止は、入力アクションの廃棄及びεの出力アクションの生成によって処理される。一実施形態では、ポリシーが決定性であるように、δ（ｑ，ε）＝（ｑ，ε）である。
【００６４】
[0080]図８は、ポリシーの満足度（アクションシーケンスが許可されているかどうか）及びアクション編集（アクションシーケンスをどのように書き換えるか）に関して、一実施形態に関するポリシーの意味を定義する。図８を参照すると、規則（１５）及び（１６）は、アクションシーケンス
【数８】
2009541898.tif 000010
でのポリシーΠの満足度を定義する。直感的に、
【数９】
2009541898.tif 000011
をΠのオートマトンに送ると、オートマトンがアクションに対して何の修正も実行せず、受け入れ信号を発信する状態でアクションシーケンスの終わりに停止する場合、及びこの場合にのみ、
【数１０】
2009541898.tif 000012
である。以下では、わかりやすくするために、あらゆる状態が「受け入れ」状態であるものと仮定されるが、この仮定を緩和することは自明（ｔｒｉｖｉａｌ）なことである。
【００６５】
[0081]規則（１７）及び（１８）は、ポリシーΠがアクションシーケンス
【数１１】
2009541898.tif 000013
を他のアクションシーケンス
【数１２】
2009541898.tif 000014
に変換する方法を定義する。直感的に、
【数１３】
2009541898.tif 000015
をΠのオートマトンに送ると、オートマトンが
【数１４】
2009541898.tif 000016
を生成する場合、及びこの場合にのみ、
【数１５】
2009541898.tif 000017
である。
【００６６】
[0082]すべての編集オートマトンが重要なポリシーを表すとは限らないため、ポリシーの整合性を定義することが有用である。例えば、編集オートマトンはアクションＡ１をＡ２に、及びＡ２をＡ１に変換することができる。推奨される置換アクションでさえ、このポリシーを満たさないため、このポリシーの下で計装メカニズムがどのように動作すべきであるかは明確でない。したがって、整合性は編集オートマトンを制御するために使用される。
定義１（ポリシーの整合性）任意のｑ、ｑ’、Ａ，及びＡ’について、δ（ｑ，Ａ）＝（ｑ’，Ａ’）がδ（ｑ，Ａ’）＝（ｑ’，Ａ’）の場合且つこの場合にのみ、ポリシーΠ＝（Ｑ，ｑ０，δ）は整合している。
定理１（堅実な助言）Πが整合していると想定する。
【数１６】
2009541898.tif 000018
の場合、
【数１７】
2009541898.tif 000019
である。
【００６７】
[0083]非整合ポリシーは、ポリシー設計における誤りを反映する。構文的には、一実施形態では、非整合ポリシーは整合ポリシーに変換され、ポリシーが状態ｑの下で入力アクションＡに対して置換アクションＡ’を提案した場合、状態ｑの下でアクションＡ’も受け入れるようにポリシーが更新される。より正確に言えば、δ（ｑ，Ａ）＝（ｑ’，Ａ’）の場合、整合性は、δ（ｑ’，Ａ’）＝（ｑ’，Ａ’）を保証することによって達成可能である。しかしながら意味論的には、ポリシー設計者は、特に矛盾する更新の場合、更新されたポリシーが意図されたものであるかどうかを判別する。例えば、前述の例では、非整合ポリシーはすでに、δ（ｑ，Ａ’）＝（ｑ”，Ａ”）を定義している可能性がある。
【００６８】
[0084]一実施形態では、整合ポリシーは本明細書で説明される計装を案内するために使用され、ポリシー整合性は本明細書で論じられる正当性定理の仮定としての働きをする。ポリシーモジュールは、内部的に、現在の状態及び完全推移関数を含む、ポリシーの編集オートマトンに関連するすべての状態を維持する。同じポリシーモジュールは、外部的に、書換えプロセスに対する以下のインターフェースを公表する。
・アクションレビュー：ｃｈｅｃｋ（Ａ）
このアクションレビューインターフェースは、引数として入力アクションを取り、オートマトンの内部状態を前進させ、推移関数に従って置換アクションを実行する。
【００６９】
[0085]前述のポリシーフレームワークは、現実的なＪａｖａＳｃｒｉｐｔ攻撃を識別する際、及び有用なフィードバックをユーザに提供する際に、効果的である。スクリプト攻撃の識別及び有用なフィードバックの提供を実証する例が、以下に示されている。
【００７０】
[0086]読みやすいように、図９は編集オートマトンを図で表している。編集オートマトンから図を構築するために、状態セットのあらゆる要素について、ノードがまず作成される。開始状態を表すノードは、ノード内への特別な縁部でマーク付けされる。状態推移関数が（ｑ，Ａ）を（ｑ’，Ａ’）にマッピングする場合、ｑのノードからｑ’のノードへの縁部が追加され、この縁部はＡ／Ａ’でマーク付けされる。簡潔にするために、ＡはＡ／Ａの略記としての働きをするために使用される。状態推移が自明である（状態及びアクションの入力ペアに対して何の変更も実行しない）場合、その縁部は省略可能である。その逆に、図が状態ｑからの縁部をアクションＡで明示的に指定しない場合、ｑのノードからそれ自体への、Ａ／Ａを伴う暗黙の縁部が存在する。
【００７１】
[0087]図１０は、ポップアップウィンドウの数を制約するためのポリシーを提示する。開始状態はｐｏｐ０  １０００である。（ｐｏｐ０，ｃｌｏｓｅ）での状態推移は自明である（暗黙）。ｏｐｅｎ及びｃｌｏｓｅ以外のアクションを伴う状態からの状態推移も自明である（暗黙）。このポリシーは、すでに２つのポップアップがある場合、実質的に新しいウィンドウオープニングアクションを無視するが、これは状態１００２へと戻る矢印１００１で示される。
【００７２】
[0088]図１１は、クッキー情報の（潜在的）伝送を制約するためのポリシーを提示する。開始状態１１０１はｓｅｎｄ−ｔｏ−ａｎｙである。状態ｓｅｎｄ−ｔｏ−ｏｒｉｇｉｎ  １１０２では、ネットワーク要求は、ｓａｆｅ−ｌｏａｄＵＲＬと呼ばれるローディングアクションの安全バージョンで処理される。このポリシーでは、（ｓｅｎｄ−ｔｏ−ａｎｙ，ｌｏａｄＵＲＬ（ｌ））、（ｓｅｎｄ−ｔｏ−ａｎｙ，ｓａｆｅ−ｌｏａｄＵＲＬ）、（ｓｅｎｄ−ｔｏ−ｏｒｉｇｉｎ，ｒｅａｄＣｏｏｋｉｅ）、（ｓｅｎｄ−ｔｏ−ｏｒｉｇｉｎ，ｓａｆｅ−ｌｏａｄＵＲＬ）での状態推移は自明である（暗黙）。読み取り、ローディング、及び安全ローディング以外のアクションを伴う状態からの状態推移も自明である（暗黙）。本質的に、このポリシーはクッキーが読み取られる前のローディングには何の制約も課さないが、その後の安全ローディングのみを許可する。
【００７３】
[0089]安全ローディングｓａｆｅ−ｌｏａｄＵＲＬの実施は、ＵＲＬのドメインに関する必要なチェックを実行し、ＵＲＬのドメインが文書の出所に合致しない場合にローディングを進行させるかどうかをユーザに問い合わせる。望ましい場合、一実施形態では、ｓａｆｅ−ｌｏａｄＵＲＬなどの置換アクションが、オートマトンの現在の状態から情報を取得し、特殊なセキュリティチェック及びユーザプロンプトを実行する。その実施はポリシーモジュールの一部であるため、書換えプロセスには影響を与えない。これは、安全アクションの実施を信頼できるものとして理解するのに十分であり、回避不可能であって、安全アクションは正しく実施され、悪意あるスクリプトがこの実施を上書きすることはできない。
【００７４】
[0090]実際には、多くの異なる種類の攻撃が存在する。一実施形態では、多くの異なるポリシーが存在し、それぞれが１つの種類の攻撃に対して保護する。一実施形態では、複数の（一般性の損失がなければ、２つの）ポリシーが１つに組み合わされ、これが書換えプロセスを案内する。
【００７５】
[0091]ポリシーの組み合わせ
【数１８】
2009541898.tif 000020
が有意である場合には、以下の２つの条件を求めることが重要である。
１．安全組み合わせ：Π１及びΠ２は整合していると想定する。すべてについて、
【数１９】
2009541898.tif 000021
である場合且つこの場合にのみ、
【数２０】
2009541898.tif 000022
である。
２．整合的な組み合わせ：Π１及びΠ２が整合している場合、
【数２１】
2009541898.tif 000023
は整合している。
【００７６】
[0092]これらの要件を順守するポリシーの組み合わせの定義は、以下の通りである。
Π１＝（｛ｐｉ｜ｉ＝０．．．ｎ｝，ｐ０，δ１）及びΠ２（｛ｑｊ｜ｊ＝０．．．ｍ｝，ｑ０，δ２）の、２つの編集オートマトンが与えられた場合、
【数２２】
2009541898.tif 000024
である。
【００７７】
[0093]直感的に、一実施形態では、組み合わせられたポリシーは両方の構成要素ポリシーを同時にシミュレートする。第１のポリシーが、第２のポリシーによって受け入れられたアクションを提案する場合、組み合わせられたポリシーはそのアクションを実行する。そうでない場合、第１のポリシーは、第２のポリシーの提案が第１のポリシーにより受け入れられるかどうかを調べようとする。上記の２つのどちらも保持されない最悪の場合、組み合わせられたポリシーはアクションを抑止する。組み合わせ後の状態の数に、組み合わせ成長が存在する。一実施形態では、ポリシーモジュールが構成要素ポリシーについて別々の状態変数及び推移関数を維持するため、これによって実施に関する問題は提起されず、ポリシー表現における線形成長を生み出す。
【００７８】
[0094]この組み合わせの定義が上記の安全性及び整合性の要件を満たすことをチェックするのは困難ではない。それにもかかわらず、同じ要件も満たす組み合わせの他の重要な定義が存在することに留意されたい。例えば、前述の定義は、第２のポリシーよりも第１のポリシーを「優先する」。第２のポリシーを優先する同様の定義も重要である。さらに、より高度な組み合わせは、提案されたアクションを再帰的にオートマトンに送ることによって矛盾を解決するように試みる場合があるが、上記の内容は最初の試行後に簡単に放棄する。一実施形態では、「安全な組み合わせ」の要件は、受け入れ可能なアクションシーケンスについてのみ伝え、置換アクションについては伝えないことに留意されたい。
【００７９】
ＣｏｒｅＳｃｒｉｐｔの計装
[0095]前述のポリシーモジュール及びそのインターフェースが与えられた場合、ＣｏｒｅＳｃｒｉｐｔの計装は直構文型書換えプロセスになる。
【００８０】
[0096]書換えプロセスのタスクは、文書ツリーをトラバースすること、及びポリシーモジュールを介してすべてのアクションをリダイレクトすることである。アクションａｃｔ（Ａ）が識別されると必ず、このアクションはアクションインターフェースｃｈｅｃｋ（Ａ）にリダイレクトされ、ポリシーモジュールが「ランタイム」時に適切な置換アクションを実行すると確信する。高位スクリプトｗｒｉｔｅ（Ｅ）を受信すると、文書は引数Ｅを特殊なインターフェースｉｎｓｔｒ（Ｅ）に逐語的に送り、その実施により、Ｅが評価された後、「ランタイム」時に書換えプロセスが再度呼び出される。
【００８１】
[0097]一実施形態では、上記２つのインターフェースは、使用するための書換えプロセスに対する２つの新しいＣｏｒｅＳｃｒｉｐｔ命令として編成される。具体的には、ＣｏｒｅＳｃｒｉｐｔの構文は以下のように拡張される。
（Ｓｃｒｉｐｔ）Ｐ：：＝．．．｜ｉｎｓｔｒ（Ｅ）｜ｃｈｅｃｋ（Ａ）
【００８２】
[0098]図１２は、書換えプロセスの細部を示す。このプロセスでは、２つの新しい命令の意味又は実施に関する知識は不要である。非自明なタスクが規則（１９）及び（２０）によって実行され、「ランタイム」コード生成及びアクションを置き換えるために新しい命令が使用される。すべての他の規則は書換え結果を伝播する。２つの新しい命令に関する書換えケースが規則（２４）で与えられ、これにより、２つのインターフェースを呼び出すコードで書換えを実行させることができる。ワールドＷ及びその４つの構成要素に関する書換えも定義される。一実施では、いくつかの構成要素（例えば文書バンクΣ）はオンデマンドで（例えばロードされた場合に）計装されることになる。
【００８３】
[0099]計装の正当性に関して論じるために、２つの新しい命令のセマンティクスが与えられる。ｉｎｓｔｒ（Ｅ）の場合、目的は、スクリプト生成をマーク付けすること及び「ランタイム」まで計装を遅延することである。したがって、その動作上のセマンティクスは引数式を評価し、書換えを通じてこれを送る。以下の定義はそれをキャプチャする。
ｆｏｃｕｓ（ｊｓ  ｉｎｓｔｒ（Ｅ））＝ｉｎｓｔｒ（Ｅ）
ｓｔｅｐＤｏｃ（ｊｓ  ｉｎｓｔｒ（Ｅ），χ）＝ｔ（Ｄ）ここで
【数２３】
2009541898.tif 000025
ｓｔｅｐ（ｉｎｓｔｒ（Ｅ），ｈ（Σ，χ，Ｂ，Ｃ））＝（Σ，χ，ａｄｖ（Ｂ，ｈ，χ），Ｃ）                                                          （３３）
【００８４】
[00100]図７でａｄｖが定義されたことを想起されたい。他の言語構造に関する動作上のセマンティクス規則は、ｉｎｓｔｒの追加の下で同様に維持される。上記で定義されたｆｏｃｕｓ及びｓｔｅｐ関数ケースは規則（１４）に適合し、これによって文書上のステップに特定のウィンドウハンドルが与えられる。
【００８５】
[00101]規則（３３）を検査すると、ＥからＤまでの評価の後、ランタイム時に書換えプロセスιが呼び出される。一実施形態では、ιの実行は常に終了し、計装済みの文書を生成する。この計装済み文書では、さらにｉｎｓｔｒによってマーク付けされた非表示のスクリプトが潜在的にさらに存在する。こうした非表示スクリプトは、後に生成された場合に書き換えられることになる。
【００８６】
[00102]ｃｈｅｃｋ（Ａ）のセマンティクスは、以下の定義を使用して同様に定義される。
ｆｏｃｕｓ（ｊｓ  ｃｈｅｃｋ（Ａ））＝ｃｈｅｃｋ（Ａ）
ｓｔｅｐＤｏｃ（ｊｓ  ｃｈｅｃｋ（Ａ），χ）＝ε
ｓｔｅｐ（ｃｈｅｃｋ（Ａ），ｈ（Σ，χ，Ｂ，Ｃ））＝ｕｎｄｅｆｉｎｅｄ
（３４）
【００８７】
[00103]ｃｈｅｃｋ（Ａ）のｆｏｃｕｓケースは、自明にｃｈｅｃｋ（Ａ）それ自体である。ｃｈｅｃｋ（Ａ）の実行はｃｈｅｃｋ（Ａ）全体を消費し、次のステップに文書片を残さないため、ｓｔｅｐＤｏｃケースとなる。ｓｔｅｐケースは、更新された動作上のセマンティクスにおけるこのケースについて言及しないため、未定義である。
【００８８】
[00104]ｃｈｅｃｋの追加により、プログラム実行はポリシーモジュールに接続される。したがって、更新された動作上のセマンティクスでは、ポリシーモジュールの内部状態（編集オートマトンの状態）が考慮される。一実施形態では、図１３のＣｏｒｅＳｃｒｉｐｔの換算関係（ｒｅｄｕｃｔｉｏｎ  ｒｅｌａｔｉｏｎ）が拡張され、換算関係の新しい形成はオートマトン推移関数（δ）及びオートマトン状態（ｑ及びｑ’）を明示的に指定する。以前のセマンティクスと同様に、規則（３５）及び（３６）によって定義されるマルチステップ関係は、規則（３７）によって定義される非決定性ステップ関係の反射的推移閉包である。この非決定性ステップ関係は、決定性ステップ関係の助けによって定義され、本明細書ではこれを「文書前進」と呼ぶ。
【００８９】
[00105]文書前進は、規則（３８）及び（３９）によって定義される。文書のフォーカスがｃｈｅｃｋへの呼び出しでない場合、古い文書の前進関係（規則（１４）で定義）が使用され、オートマトン状態は変更されないままである。フォーカスがｃｈｅｃｋへの呼び出しである場合、オートマトン状態は更新され、推移関数に従って置換アクションが生成され、置換アクションＡＶはオリジナルアクションＡの代わりに実行されるのでワールド構成要素はａｃｔ（ＡＶ）のステップケースを使用して更新される。
【００９０】
[00106]したがって、プログラム実行と共にポリシーインスタンスが実行され、ポリシーインスタンスの現在の状態はプログラムのアクションに対応して更新される。
【００９１】
ＣｏｒｅＳｃｒｉｐｔの具体化
[00107]一実施形態では、ＣｏｒｅＳｃｒｉｐｔはクライアント側スクリプト記述のためのコア言語としてモデル化される。その特徴的な機能には、文書内へのスクリプトの組み込み、「ランタイム」時の新しいスクリプトの生成、セキュリティ関連アクションが含まれる。前述の観念は、他のブラウザベースのスクリプト記述言語にも適用可能である。
【００９２】
[00108]第１に、ＣｏｒｅＳｃｒｉｐｔは、ｊｓノードを使用する文書ツリー内へのコードの組み込みをサポートする。こうした処理は、ＪａｖａＳｃｒｉｐｔにおける＜ｓｃｒｉｐｔ＞タグの使用から適合される（図１で例を示した）。＜ｓｃｒｉｐｔ＞タグの他に、ＨＴＭＬ文書にスクリプトを組み込むための他の方法は数多くある。スクリプトが発生可能ないくつかの共通の場所には、イメージ（例えば＜ＩＭＧ  ＳＲＣ＝．．．＞）、フレーム（例えば＜ＩＦＲＡＭＥ  ＳＲＣ＝．．．＞）、テーブル（例えば＜ＴＡＢＬＥ  ＢＡＣＫＧＲＯＵＮＤ＝．．．＞）、ＸＭＬ（例えば＜ＸＭＬ  ＳＲＣ＝．．．＞）、及び本文背景（例えば＜ＢＯＤＹ  ＢＡＣＫＧＲＯＵＮＤ＝．．．＞）が含まれる。さらに、スクリプトは、多数のイベントハンドラ（例えば、ｏｎＡｃｔｉｖａｔｅ（）、ｏｎＣｌｉｃｋ（）、ｏｎＬｏａｄ（）、ｏｎＵｎｌｏａｄ（）、．．．）内に組み込むこともできる。一実施形態では、こうした組み込みスクリプトも識別及び書換えされる。
【００９３】
[00109]第２に、ＣｏｒｅＳｃｒｉｐｔはｗｒｉｔｅ（Ｅ）を使用して「ランタイム」時にスクリプトを生成する。これは、ＪａｖａＳｃｒｉｐｔコア言語におけるｅｖａｌ、並びにＤＯＭにおけるｗｉｎｄｏｗ．ｅｘｅｃＳｃｒｉｐｔ、ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ、ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅＩｎを含む、いくつかの関係関数での統一見解である。これらの関数はすべて文字列引数を取る。関数ｅｖａｌは文字列をＪａｖａＳｃｒｉｐｔのステートメント又は式として評価し、結果を戻す。関数ｗｉｎｄｏｗ．ｅｘｅｃＳｃｒｉｐｔは、１つ又は複数のスクリプトステートメントを実行するが、値は戻さない。高位スクリプトでのＣｏｒｅＳｃｒｉｐｔの処理はこれら２つに対して十分表現的である。
【００９４】
[00110]しかしながら、関数ｄｏｃｕｍｅｎｔ．ｗｒｉｔｅ及びｄｏｃｕｍｅｎｔ．ｗｒｉｔｅＩｎはより困難である。これら２つの関数は、文字列を、それらのウィンドウに表示されることになる文書フラグメントとして送り、ここで文書フラグメントは組み込みスクリプトを有することができる。これらの文書フラグメントは完全な文書ツリーノードである必要はなく、その代わりに、以下の例で実証されるように、他の文字列とつなぎ合わせて完全なノードを形成することができる。
<script>
document.write("<scr");
document.write("ipt>malic");
var i = 1;
document.write("iouscode; </sc");
document.write("ript>") ;
</script>
<script>
document.write("<scr");</script>ipt>
maliciouscode
</script>
【００９５】
[00111]上記それぞれのｗｒｉｔｅ関数は、単純なフィルタに対して無害なテキストを生成するために示される。ＣｏｒｅＳｃｒｉｐｔ計装を適用する際にこうした抜け穴を避けるために、一実施形態では、生成された文書フラグメントは、次の段階の書換えプロセスに送られる前につなぎ合わされる。これは、コードのセマンティクスの変更を避けるために注意深く実行される（図２を想起）。新しいスクリプトを分離フラグメントとして生成することの表現性は、適切に意図されたプログラムにおいて有用であるとは思われないことを見ると、非文法的なスクリプト片の生成を単に阻止することが、より良い解決策である可能性がある。
【００９６】
[00112]一実施形態では、ｗｒｉｔｅ（Ｅ）ノードが、文書ツリー内のまったく同じ場所に位置決めされることになる新しいノードを生成するため、ＣｏｒｅＳｃｒｉｐｔは任意の方法で文書の内容を修正する方法を提供しない。ＤＯＭは、文書を修正するための他の方法を提供する。例えば、文書は、任意の要素のｉｎｎｅｒＨＴＭＬ、ｉｎｎｅｒＴｅｘｔ、ｏｕｔｅｒＨＴＭＬ、ｏｕｔｅｒＴｅｘｔ、及びｎｏｄｅＶａｌｕｅプロパティを介して修正することができる。一実施形態では、これらはＣｏｒｅＳｃｒｉｐｔモデルではカバーされていない。それにもかかわらず、「ランタイム」スクリプト生成のためのメカニズムが、文書ツリー内のどのノードが更新されるかを指定する、という拡張が考えられる。ポリシーインターフェースを通過するために適切に書き換えられる限り、生成されたスクリプトがどこに配置されるかは関係ないため、計装方法は依然として同じである。
【００９７】
[00113]最後に、一実施形態では、ＣｏｒｅＳｃｒｉｐｔは実証のための何らかの単純なアクションを含む。ある実現が、攻撃及び保護に関連する多くの他のアクションに対処することになる。何らかの関連するＤＯＭ  ＡＰＩには、クッキー、ウィンドウ、ネットワーク使用、クリップボード、及びユーザインターフェース要素を操作するためのものが含まれる。加えて、何らかのイベントハンドラに関する暗黙アクションを導入することが有用である。例えば、以下の「アンデッドウィンドウ」攻撃は、ｏｎＵｎｌｏａｄイベント内でのウィンドウのオープンを禁止することによって、防止することができる。
<html>
<head>
<scripttype="text/javascript"> 
functionrespawn() {window.open ("URL/undead.html") }
</script>
</head>
<bodyonunload="respawn() ">Content of undead.html</body>
</html>
【００９８】
実施アーキテクチャの例
[00114]図１４は、実施アーキテクチャの例を示す。各モジュールはハードウェア（回路、専用論理など）、ソフトウェア（汎用コンピュータシステム又は専用マシン上で実行するようなもの）、又はそれら両方の組み合わせを備えることができる。
【００９９】
[00115]図１４を参照すると、実施により、構文上のコード書換え（ι）のためのモジュール１４０１、特殊命令（ｉｎｓｔｒ）の解釈のためのモジュール１４０２、及びセキュリティポリシー（Π）の実施のためのモジュール１４０４という、３つの小規模モジュールを使用して、ブラウザを拡張することができる。一実施形態では、ブラウザ１４０３は文書Ｄを直接解釈しない。その代わりにブラウザ１４０３は、書換えモジュールによって生成された書換バージョンι（Ｄ）を解釈する。特殊命令ｉｎｓｔｒ（Ｅ）の時に、ｉｎｓｔｒの実施は、式Ｅを評価し、書換えモジュール１４０１を介して結果文書Ｄ’を送信する。書換えの結果ι（Ｄ’）は、さらに解釈するためにブラウザ１４０３に向けて返送される。ポリシーインターフェースｃｈｅｃｋ（Ａ）への呼び出し時に、ポリシーモジュール１４０４はオートマトンの状態を前進させ、置換アクションＡ’を提供する。
【０１００】
[00116]一実施形態では、書換えモジュール１４０１は、ＪａｖａＳｃｒｉｐｔコードを解析するためのＡＮＴＬＲの支援で、Ｊａｖａで実施される。ＡＮＴＬＲに関する詳細な情報については、Ｔ．Ｐａｒｒ等のＡＮＴＬＲ参照マニュアル（２００５年１月、ｈｔｔｐ：／／ｗｗｗ．ａｎｔｌｒ．ｏｒｇ／で入手可能）を参照されたい。このモジュールは、ＨＴＭＬ文書を抽象構文ツリー（ＡＳＴ）に解析し、ＡＳＴで書換えを実行し、ＡＳＴから計装済みＪａｖａＳｃｒｉｐｔコード及びＨＴＭＬ文書を生成する。一実施形態では、ブラウザ１４０３は、すべてのＨＴＴＰ要求のプロキシとして書換えモジュール１４０１を使用するようにセットアップされる。
【０１０１】
[00117]一実施形態では、特殊命令は、前述の規則（３３）によって与えられる動作上のセマンティクスに従って、ブラウザ１４０３内のＪａｖａＳｃｒｉｐｔインタプリタを修正することによって実施可能である。インタプリタが、（規則（３３）における評価関係によって抽象化された）文字列引数からの文書片を解析した後、スクリプトの書換えを実行するために書換えモジュール１４０１が呼び出される。この解釈は、書き換えられた文書片を使用して、後で再開される。
【０１０２】
[00118]上記は簡単であるが、ブラウザの実施を変更する必要がある。別の方法として、通常のＪａｖａＳｃｒｉｐｔ言語自体の内部での実施に適したものがあり、ｉｎｓｔｒがＪａｖａＳｃｒｉｐｔ関数として実施される。ＪａｖａＳｃｒｉｐｔ関数の値呼び（ｃａｌｌ−ｂｙ−ｖａｌｕｅ）の性質が、関数本文を実行する前に引数式を評価し、これで期待されたセマンティクスが自然に提供される。例えば、一実施形態では、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクト（Ａ．ｖａｎ  Ｋｅｓｔｅｒｅｎ及びＤ．Ｊａｃｋｓｏｎ。Ｔｈｅ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクト。Ｗ３Ｃ作業草案、２００６年、ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／ＴＲ／ＸＭＬＨｔｔｐＲｅｑｕｅｓｔ／で入手可能）（Ａｊａｘ手法の一部として広く知られる）を使用して、内部ＪａｖａＳｃｒｉｐｔコードから書換えモジュールのＪａｖａプログラムが呼び出される。
【０１０３】
[00119]この手法は便利であるが、悪意ある活用に対して攻撃を受けやすいため、ＪａｖａＳｃｒｉｐｔインタプリタの修正のように堅固ではない。前述のように、ＪａｖａＳｃｒｉｐｔは、例えばｉｎｎｅｒＨＴＭＬを介して何らかの形の自己修正型コードを提供する。これは、ｉｎｓｔｒがＪａｖａＳｃｒｉｐｔ内で実施され、着信文書と共に解釈される場合、ｉｎｓｔｒの実施を書き換えるための悪意あるスクリプトの可能性を提示するものである。こうした悪用に対して保護するために追加のコード検査が必要であり、これによって、実施がＪａｖａＳｃｒｉｐｔ言語の何らかの特異性に依存するものとなる。したがって、異なるトレードオフに直面した場合に、インタプリタを修正することがさらに望ましい可能性がある。
【０１０４】
[00120]同様の実施選択が、ポリシーモジュールに適用される。例えば、期待されるポリシーインターフェースを備えたブラウザへのアドオンとして、ポリシーモジュールを実施することができる。一実施形態では、ポリシーモジュールは通常のＪａｖａＳｃｒｉｐｔでも実施され、ｃｈｅｃｋは通常のＪａｖａＳｃｒｉｐｔ関数として実施され、ｃｈｅｃｋ呼び出しは、検査中のアクションを反映する適切に符号化された引数を備えた通常の関数呼び出しである。ｃｈｅｃｋ関数本文は、通常はチェック済み引数及び／又は挿入されたユーザプロンプトを備えるオリジナルアクションである、置換アクションを実行する。前述の自己修正型コードを介した悪意ある活用に対するｉｎｓｔｒの保護も、ここで適用される。
【０１０５】
[00121]一実施形態では、ポリシーは「文書クラスタ」ごとに実施される。ブラウザは同時に複数のウィンドウを保持し、これらウィンドウの一部（例えば、ポップアップが同じ出所からの文書を保持している場合、ウィンドウとそのポップアップ）が互いに通信し、これらは本明細書では同じクラスタにあるものとされる。一実施形態では、各クラスタにはそれ独自のポリシーインスタンスがＪａｖａＳｃｒｉｐｔオブジェクトの形で与えられ、同じクラスタ内のすべてのウィンドウには、クラスタのポリシーインスタンスへの参照が与えられるが、これは、ウィンドウが作成されるか又は文書がロードされた場合に、正しくセットアップされる。これによる計装の本質への影響はない。それにもかかわらず、実際のポリシーを表現するためにクラスタごとの実施が必要である。一方では、一実施形態において、異なるクラスタからの文書は同じポリシーインスタンスを共有しないため、１つの文書の挙動は無関係の文書が実行できる内容に影響を与えないことになる（例えば、２つの無関係なウィンドウはそれぞれ独自のポップアップ割り当てを有することができる）。他方で、同じクラスタからの文書は、悪意ある活用（例えば、攻撃は同じクラスタ内の別々の文書で関連するアクションを実行する可能性がある）を防ぐために、同じポリシーインスタンスを共有する。
【０１０６】
方法の正当性
[00122]本明細書では、計装の正当性が、安全性及び透明性という２つの定理として提示される。安全性とは、計装済みコードがポリシーを順守することを意味する。透明性とは、計装が、すでにポリシーを順守しているコードの挙動に影響を与えないことを意味する。本明細書で説明される計装はすべてのアクションを提案のためにポリシーモジュールを介して送るため、これらの正当性定理の背後にある直感は単純である。提案されるアクションはポリシー整合性によりポリシーを満たすため、安全性が保持される。提案されるアクションは、入力アクションがすでにポリシーを満たしている場合には入力アクションと同一となるため、透明性が保持される。以下の説明では、これら２つの定理が一連の補助定理を使用して確立される。
【０１０７】
[00123]第１に、正統性の表記を紹介する。
定義２（正統性）Ｗ（又はΣ、χ、Ｂ、Ｃ、Ｄ、Ｐ）は、ａｃｔ（Ａ）又はｗｒｉｔｅ（Ｅ）の発生がない場合、正統である。
【０１０８】
[00124]一実施形態では、本明細書で説明される計装が、以下の補助定理の場合のように正統な結果を生じることに留意されたい。
補助定理１（計装の正統性）ι（Ｐ）、ι（Ｄ）、ι（Ｃ）、ι（Ｂ）、ι（χ）、ι（Σ）、及びι（Ｗ）は正統である。
証明の概略：Ｐ及びＤの構造上での同時帰納による。Ｃ、Ｂ、χ、Σ、及びＷの構造上でのケース分析による。
【０１０９】
[00125]正統性は、以下に示されるようなステップ関係によって保持される。
補助定理２（正統性の保持）Ｗが正統であり、├δ（Ｗ，ｑ）→（Ｗ’，ｑ’）：Ａｖの場合、Ｗ’は正統である。
証明の概略：文書の構造上での帰納を伴う、ステップ関係の定義（→）による。Ｗは正統であるため、ｗｒｉｔｅ（Ｅ）実行のケースは不可能である。ｉｎｓｔｒ（Ｅ）実行のケースでは、動作上のセマンティクスはフォーカスノードを置換するために計装済み文書を生成する。したがって、正統性は補助定理１から得られる。すべての他のケースでは、動作上のセマンティクスは、仮定によれば正統な他のプログラム構成要素から文書片を取得することができる。
【０１１０】
[00126]正統なワールドの実行は、以下で説明するようにポリシーを順守する。
補助定理３（ポリシー満足度）Π＝（Ｑ，ｑ，δ）は整合していると想定する。Ｗが正統であり、├δ（Ｗ，ｑ）→（Ｗ’，ｑ’）：Ａｖの場合、δ（ｑ，Ａｖ）＝（ｑ’，Ａｖ）である。
証明の概略：ステップ関係（→）上でのケース分析による。ｃｈｅｃｋ（Ａ）実行のケースでは、規則（３９）での反転により、δ（ｑ，Ａｖ１）＝（ｑ’，Ａｖ）である。期待される結果δ（ｑ，Ａｖ）＝（ｑ’，Ａｖ）は、ポリシー整合性の定義から直接得られる。他のすべてのケースでは、規則（３８）での反転により、ｑ＝ｑ’である。規則（１４）でのさらなる反転により、Ａｖ＝∈（Ｗが正統であるため、ａｃｔ（Ａ）実行のケースは不可能）である。ポリシーの決定性要件により、δ（ｑ，∈）＝（ｑ，∈）である。
【０１１１】
[00127]安全性定理は、本来、これらの補助定理から生じる。
定理２（安全性）Π＝（Ｑ，ｑ，δ）は整合していると想定する。Ｗが正統であり、
【数２４】
2009541898.tif 000026
の場合、
【数２５】
2009541898.tif 000027
である。
証明の概略：マルチステップ関係（→＊）での構造上の帰納による。ゼロステップ及び空出力アクションの基本ケースは自明である。帰納ケースでは、├δ（Ｗ，ｑ）→（Ｗ１，ｑ１）：Ａｌｖ，├δ（Ｗ１，ｑ１）→＊（Ｗ’，ｑ’）：、及び
【数２６】
2009541898.tif 000028
、及び
【数２７】
2009541898.tif 000029
となるように、Ｗ１、ｑ１、及びＡｌｖが存在する。補助定理３により、δ（ｑ，Ａｖ）＝（ｑ１，Ａｖ）である。（Ｑ，ｑ１，δ）はポリシー整合性の仮定及び定義によって整合している。Ｗ１は補助定理２により正統である。帰納仮説により、
【数２８】
2009541898.tif 000030
である。ポリシー満足度の定義により、
【数２９】
2009541898.tif 000031
である。
【０１１２】
[00128]計装の見地から、任意のＷが与えられたι（Ｗ）が安全であることを確立することが望ましい。補助定理１によってι（Ｗ）は正統であるため、これは定理２の推論に従う。
【０１１３】
[00129]透明性の定理を公式化するために、上記で定義されたマルチステップ関係が計装の実行前に使用される。これは、ポリシーモジュールに関する知識なしに、着信スクリプトが重要なＣｏｒｅＳｃｒｉｐｔ（又はＪａｖａＳｃｒｉｐｔ）プログラムのはずであるとの直感を反映する。オリジナルコードがポリシーを満たしている場合、計装済みコードの単一ステップ実行をオリジナルコードの単一ステップ実行と関係付けるために、ロックステップの補助定理が導入される。
補助定理４（ロックステップ）Ｗ→Ｗ’：Ａｖ及びδ（ｑ，Ａｖ）＝（ｑ’，Ａｖ）の場合、├δ（ι（Ｗ），ｑ）→（ι（Ｗ’），ｑ’）：Ａｖである。
証明の概略：文書の構造上での帰納を伴う、ステップ関係（→）の定義による。ι（Ｗ）のフォーカスとは、Ｗのフォーカスに対応するツリーノードを言い表す。
【０１１４】
[00130]ｗｒｉｔｅ（Ｅ）がＷのフォーカスのケースでは、ｉｎｓｔｒ（Ｅ）はι（Ｗ）のフォーカスとなる。ｗｒｉｔｅ及びｉｎｓｔｒの動作上のセマンティクスは、ｉｎｓｔｒ（Ｅ）が計装済み可変環境を使用し計装済み結果文書を戻すことを除いて、引数Ｅの同様の評価を実行する。どちらのケースでも出力アクションＡｖは∈である。（ｉ）規則（３７）に従い、Ｗ→Ｗ’：Ａｖを取得するために使用したものと同じハンドルｈを選択すること、（ｉｉ）古い単一ステップ関係ｈ├ι（Ｗ）→ι（Ｗ’）：Ａｖに戻って参照する、規則（３８）に従うこと、次に（ｉｉｉ）様々な構成要素が計装済みバーションに置き換えられた、Ｗ→Ｗ’：Ａｖを取得するために使用されたｈ├Ｗ→Ｗ’：Ａｖの導出に従うこと、によって、導出├δ（ι（Ｗ），ｑ）→（ι（Ｗ’），ｑ’）：Ａｖが実行可能である。
【０１１５】
[00131]ａｃｔ（Ａ）がＷのフォーカスであるケースでは、ｃｈｅｃｋ（Ａ）はι（Ｗ）．ａｃｔ及びｃｈｅｃｋのフォーカスとなり、どちらもフォーカスツリーノードを置き換えるために空の文字列を生成する。ａｃｔ（Ａ）の動作上のセマンティクスは、Ａ対Ａｖを評価する（規則（１４））。ｃｈｅｃｋ（Ａ）の動作上のセマンティクスはＡ対Ａｖを評価し、Ａｖをポリシーに送る（規則（３９））。仮定により、δ（ｑ，Ａｖ）＝（ｑ’，Ａｖ）である。したがって、一実施形態では、ａｃｔ及びｃｈｅｃｋはこのケースでは同じ出力アクションを生成する。ｃｈｅｃｋ（Ａ）の動作上のセマンティクスは、ワールド構成要素を更新するために、さらにマクロｓｔｅｐをａｃｔ（Ａｖ）に適用することになる。したがって、２つの換算のさらなる導出は、同じ構造に従う。
【０１１６】
[00132]他のすべてのケースでは、Ｗ及びι（Ｗ）は同じ命令を実行している。計装済み換算の導出は、オリジナル換算の導出に従う。透明性定理は、本来、ロックステップの補助定理に従う。
定理３（透明性）
【数３０】
2009541898.tif 000032
証明の概略：マルチステップ関係（→＊）での構造上の帰納による。ゼロステップ及び空の出力アクションの基本ケースは自明である。帰納的ケースでは、
【数３１】
2009541898.tif 000033
、及び
【数３２】
2009541898.tif 000034
となるように、Ｗ１及びＡｌｖが存在する。仮定
【数３３】
2009541898.tif 000035
及びポリシー満足度の定義により、δ（ｑ，Ａｌｖ）＝（ｑ１，Ａｌｖ）及び
【数３４】
2009541898.tif 000036
となるように、ｑ１が存在する。補助定理４により、├δ（ι（Ｗ），ｑ）→（ι（Ｗ’），ｑ１）：Ａｌｖである。帰納仮説により、
【数３５】
2009541898.tif 000037
である。規則（３６）により、
【数３６】
2009541898.tif 000038
である。
【０１１７】
[00133]前述の透明性定理では、オリジナルのワールドＷは計装及びポリシーインターフェースを表すものではなく、通常のＪａｖａＳｃｒｉｐｔで作成された着信スクリプトを反映する。計装及びポリシーインターフェースを表す着信スクリプトを可能にするために、以下のように、透明性定理の変形を公式化することができる。
定理４（拡張透明性）
【数３７】
2009541898.tif 000039
この定理は、Ｗを非正統とすることが可能であり、Ｗはｗｒｉｔｅ、ａｃｔ、ｉｎｓｔｒ、及びｃｈｅｃｋの混合を含むことができる。この定理の証明には、同様に拡張されたロックステップの補助定理が必要である。この定理によって可能となる２つの新しいケース（ｉｎｓｔｒ及びｃｈｅｃｋ）では書換えは本来識別関数であるため、証明の拡張は簡単である。
【０１１８】
コンピュータシステムの例
[00134]図１５は、本明細書で説明される動作のうちの１つ又は複数を実行することができる、例示的コンピュータシステムを示すブロック図である。図１５を参照すると、コンピュータシステム１５００は例示的クライアント又はサーバコンピュータシステムを備えることができる。コンピュータシステム１５００は、情報を通信するための通信メカニズム又はバス１５１１と、情報を処理するためにバス１５１１に接続されたプロセッサ１５１２とを備える。プロセッサ１５１２はマイクロプロセッサを含むが、例えば、Ｐｅｎｔｉｕｍ（商標）、ＰｏｗｅｒＰＣ（商標）、Ａｌｐｈａ（商標）などのマイクロプロセッサに限定されることはない。
【０１１９】
[00135]システム１５００は、プロセッサ１５１２によって実行されることになる情報及び命令を格納するためにバス１５１１に接続された、ランダムアクセスメモリ（ＲＡＭ）又は他の動的記憶デバイス１５０４（主メモリと呼ばれる）をさらに備える。主メモリ１５０４は、プロセッサ１５１２による命令の実行中に、一時変数又は他の中間情報を格納するためにも使用することができる。
【０１２０】
[00136]コンピュータシステム１５００は、プロセッサ１５１２に関する静的情報及び命令を格納するためにバス１５１１に接続された、読み取り専用メモリ（ＲＯＭ）及び／又は他の静的記憶デバイス１５０６、並びに、磁気ディスク又は光ディスク及びその対応するディスクドライブなどのデータ記憶デバイス１５０７も備える。データ記憶デバイス１５０７は、情報及び命令を格納するためにバス１５１１に接続される。
【０１２１】
[00137]さらにコンピュータシステム１５００は、情報をコンピュータユーザに表示するためにバス１５１１に接続された、陰極線管（ＣＲＴ）又は液晶ディスプレイ（ＬＣＤ）などのディスプレイデバイス１５２１に接続することができる。英数及び他のキーを含む英数入力デバイス１５２２も、情報及びコマンド選択をプロセッサ１５１２に通信するためにバス１５１１に接続することができる。追加のユーザ入力デバイスは、方向情報及びコマンド選択をプロセッサ１５１２に通信するため、及びディスプレイ１５２１上でのカーソルの動きを制御するためにバス１５１１に接続された、マウス、トラックボール、トラックパッド、スタイラス、又はカーソル方向キーなどの、カーソル制御１５２３である。
【０１２２】
[00138]バス１５１１に接続可能な他のデバイスは、紙、フィルム、又は同様のタイプの媒体などの媒体上に情報をマーク付けするために使用可能な、ハードコピーデバイス１５２４である。バス１５１１に接続可能な他のデバイスは、電話又はハンドヘルドパームデバイスと通信するための有線／無線通信機能１５２５である。
【０１２３】
[00139]システム１５００の構成要素及び関連するハードウェアのいずれか又はすべてが、本発明で使用可能であることに留意されたい。しかし、当然ながら、コンピュータシステムの他の構成がデバイスの一部又はすべてを含むことが可能である。
【０１２４】
[00140]当業者が前述の説明を読んだ後には、本発明の多くの代替形態及び修正形態が明らかとなることは明確であろうが、例示のために図示及び説明されたいずれの特定の実施形態も、制限的であるものとみなされることを意図していないことを理解されよう。したがって、様々な実施形態の細部を参照することは、本発明に不可欠であるとみなされる特徴のみがその内部に示された特許請求の範囲を制限することを意図していない。
【図面の簡単な説明】
【０１２５】
【図１】ＨＴＭＬ文書に組み込まれたスクリプトの例を示す図である。
【図２】高位スクリプトの実行順の例を示す図である。
【図３Ａ】文書に組み込まれたスクリプトプログラムを計装するためのプロセスの一実施形態を示す流れ図である。
【図３Ｂ】高位スクリプトの計装を実行するためのプロセスの一実施形態を示す流れ図である。
【図４】ＣｏｒｅＳｃｒｉｐｔ構文の一実施形態を示す図である。
【図５】ＣｏｒｅＳｃｒｉｐｔの一実施形態における数式及びアクション評価を示す図である。
【図６】ＣｏｒｅＳｃｒｉｐｔの一実施形態におけるワールド実行を示す図である。
【図７】ＣｏｒｅＳｃｒｉｐｔの一実施形態におけるＣｏｒｅＳｃｒｉｐｔセマンティクスのヘルパー関数を示す図である。
【図８】ＣｏｒｅＳｃｒｉｐｔの一実施形態で使用するためのポリシー満足度及びアクション編集を示す図である。
【図９】編集オートマトンの一実施形態を示す図である。
【図１０】ポップアップポリシーに関するオートマトンの例を示す図である。
【図１１】クッキーポリシーに関するオートマトンの例を示す図である。
【図１２】直構文型書換えの一実施形態を示す図である。
【図１３】ポリシーモジュールで拡張されたＣｏｒｅＳｃｒｉｐｔの一実施形態におけるワールド実行を示す図である。
【図１４】例示的実施アーキテクチャを示す図である。
【図１５】コンピュータシステムの例を示すブロック図である。
【図１】
2009541898.tif 000040
【図２】
2009541898.tif 000041
【図３Ａ】
2009541898.tif 000042
【図３Ｂ】
2009541898.tif 000043
【図４】
2009541898.tif 000044
【図５】
2009541898.tif 000045
【図６】
2009541898.tif 000046
【図７】
2009541898.tif 000047
【図８】
2009541898.tif 000048
【図９】
2009541898.tif 000049
【図１０】
2009541898.tif 000050
【図１１】
2009541898.tif 000051
【図１２】
2009541898.tif 000052
【図１３】
2009541898.tif 000053
【図１４】
2009541898.tif 000054
【図１５】
2009541898.tif 000055
【手続補正書】
【提出日】平成21年1月6日(2009.1.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
自己修正型コードを含むスクリプトプログラムが内部に組み込まれた文書をダウンロードするステップと、
前記スクリプトプログラムを検査するステップと、
前記スクリプトの実行によって生じる挙動が安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠するように前記スクリプトプログラムを書き換えるステップと、
を含む方法。
【請求項２】
前記自己修正型コードが動的に生成されたＪａｖａＳｃｒｉｐｔを含む、請求項１に記載の方法。
【請求項３】
前記スクリプトプログラムを書き換えるステップが、オンデマンドで直構文型書換えを実行するステップを含む、請求項１に記載の方法。
【請求項４】
前記スクリプトプログラムを書き換えるステップが、ランタイムチェックを前記スクリプトプログラムに挿入するステップを含む、請求項１に記載の方法。
【請求項５】
前記ランタイムチェックが、セキュリティチェック及びユーザ警告からなる１つ又は複数のグループを含む、請求項４に記載の方法。
【請求項６】
前記ランタイムチェックが、ランタイム時に実行された場合に、前記文書の評価動作の実行に応答して計装プロセスを呼び出すことで前記スクリプトプログラムを前記文書内に計装させるコードを含む、請求項４に記載の方法。
【請求項７】
前記スクリプトプログラムを書き換えるステップが、ランタイム実行中にポリシーモジュールを介してアクションをリダイレクトするためのコードを追加するステップを含む、請求項１に記載の方法。
【請求項８】
前記ポリシーモジュールが、前記ランタイム時のアクションに対して置換アクションを実行するステップをさらに含む、請求項７に記載の方法。
【請求項９】
前記書き換えられたスクリプトプログラムが前記文書の計装済みバージョンの一部である、請求項１に記載の方法。
【請求項１０】
前記文書の前記計装済みバージョンが非表示スクリプトを含み、前記非表示スクリプトがランタイム中に生成された場合に前記非表示スクリプトを書き換えるステップをさらに含む、請求項９に記載の方法。
【請求項１１】
前記スクリプトプログラムを書き換えるステップが、
前記文書を抽象構文ツリーに解析するステップと、
前記抽象構文ツリーでの書換えを実行するステップと、
前記抽象構文ツリーから計装済みスクリプトコード及び計装済み文書を生成するステップと、
を含む、請求項１に記載の方法。
【請求項１２】
前記１つ又は複数のポリシーが動的に修正可能である、請求項１に記載の方法。
【請求項１３】
前記１つ又は複数のポリシーが編集オートマトンとして表される、請求項１に記載の方法。
【請求項１４】
少なくとも１つのポリシーが、スクリプトプログラム内の第１のアクションシーケンスを、前記第１のアクションシーケンスとは異なる第２のアクションシーケンスへと変換する、請求項１に記載の方法。
【請求項１５】
前記１つ又は複数のポリシーが、複数のポリシーを１つのポリシーに組み合わせる１つのポリシーを含む、請求項１に記載の方法。
【請求項１６】
現在の状態及び完全な推移関数を含む、前記ポリシーの編集オートマトンに関連する状態を維持するステップと、
あるアクションでチェック関数を呼び出すステップ、及びそれに応答して前記オートマトンの状態を前進させ、前記アクションに置換アクションを提供するステップと、
をさらに含む、請求項１に記載の方法。
【請求項１７】
前記文書がＨＴＭＬ文書である、請求項１に記載の方法。
【請求項１８】
前記スクリプトプログラムが、ＪａｖａＳｃｒｉｐｔ及びＥＣＭＡスクリプトベースプログラムからなるグループのうちの１つである、請求項１に記載の方法。
【請求項１９】
前記文書をダウンロードするステップが、ＪａｖａＳｃｒｉｐｔプログラムに関するインタプリタ、又はクライアントにおけるＥＣＭＡスクリプトベースプログラムに関するインタプリタを含む、ブラウザ又は他のソフトウェアによって実行される、請求項１に記載の方法。
【請求項２０】
セキュリティポリシーを実施するためのポリシー管理モジュールと、
前記セキュリティポリシーに基づいて、書換えプロセスを実行して文書に組み込まれたスクリプトを書き換える書換えモジュールであり、前記スクリプトプログラムが自己修正型コードを含み、前記スクリプトの実行によって生じる挙動が安全性及びセキュリティ要件に準拠するように、前記書換えプロセスが１つ又は複数のポリシーに基づいて前記文書を計装することで前記文書内の前記スクリプトを制御する、書換えモジュールと、
書換え中に前記スクリプトに追加された命令を解釈するための解釈モジュールと、
を含むプロキシ。
【請求項２１】
前記プロキシがブラウザの一部を含む、請求項２０に記載のプロキシ。
【請求項２２】
前記スクリプトプログラムに追加された前記命令のうちの１つの実行により、前記スクリプトが内部に組み込まれた前記文書に対応する数式をランタイム時に評価させ、ランタイム時に前記解釈モジュールによって生成された文書を、書換えプロセスを施すために前記書換えモジュールを介して送信させる、請求項２０に記載のプロキシ。
【請求項２３】
前記ポリシー管理モジュール及び前記書換えモジュールが別々のモジュールである、請求項２０に記載のプロキシ。
【請求項２４】
前記ポリシーモジュールが、現在の状態及び完全な推移関数を含む、前記ポリシーの前記編集オートマトンに関連する状態を維持する、請求項２０に記載のプロキシ。
【請求項２５】
前記ポリシーモジュールが、あるアクションでチェック関数を呼び出し、それに応答して前記オートマトンの状態を前進させ、前記アクションに置換アクションを提供する、請求項２４に記載のプロキシ。
【請求項２６】
前記文書が、ブラウザからの要求に応答してネットワーク環境からダウンロードされる、請求項２０に記載のプロキシ。
【請求項２７】
前記書換えモジュールが、
文書を抽象構文ツリーに解析し、
前記抽象構文ツリーで書換えを実行し、
前記抽象構文ツリーから計装済みスクリプトコード及び文書を生成する、
請求項２０に記載のプロキシ。
【請求項２８】
命令を格納する１つ又は複数のマシン読み取り可能媒体を有する装置であって、マシンによって実行された場合、前記命令が、
自己修正型コードを含むスクリプトプログラムが内部に組み込まれた文書のダウンロードと、
前記スクリプトプログラムの検査と、
前記スクリプトの実行によって生じる挙動が安全性及びセキュリティを定義する１つ又は複数のポリシーに準拠させるための前記スクリプトプログラムの書換えと、
を前記マシンに実行させる、装置。
【国際調査報告】
2009541898.tif 000056
2009541898.tif 000057