(57)【要約】  少なくとも１つのクラウドアプリケーションのネットワークアドレスを変更するための方法およびシステム。この方法は、少なくとも１つのクラウドアプリケーションからクライアントデバイスに送られるウェブページを受信するステップであって、ウェブページが、ランタイム中にクライアントデバイスにロードされる少なくとも１つのスクリプトを指定する、ステップと、ウェブページに１つのコードを注入するステップと、注入された１つのコードによって、少なくとも１つのスクリプトのそれぞれをロードする試みを受信するステップと、あらかじめ定義されたネットワークアドレスで少なくとも１つのスクリプトにおいて指定される各ネットワークアドレスにサフィックスを付加することによって少なくとも１つのスクリプトを変更するステップと、変更された少なくとも１つのスクリプトをクライアントデバイスに送るステップであって、クライアントデバイスでの変更された少なくとも１つのスクリプトのランタイム実行が、クライアントデバイスからクラウドアプリケーションへの今後の要求を、サフィックスを付加されたネットワークアドレスへリダイレクトさせる、ステップとを含む。
2017532615.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのクラウドアプリケーションのネットワークアドレスを変更するための方法であって、
前記少なくとも１つのクラウドアプリケーションからクライアントデバイスへ送られたウェブページを受信するステップであって、ウェブページが、ランタイム中に前記クライアントデバイスにロードされる少なくとも１つのスクリプトを指定する、ステップと、
前記ウェブページに１つのコードを注入する(injecting)ステップと、
前記注入された１つのコードによって、前記少なくとも１つのスクリプトのそれぞれをロードする試みを受信するステップと、
あらかじめ定義されたネットワークアドレスで前記少なくとも１つのスクリプトにおいて指定される各ネットワークアドレスにサフィックスを付加することによって、前記少なくとも１つのスクリプトを変更するステップと、
前記変更された少なくとも１つのスクリプトを前記クライアントデバイスに送るステップであって、前記クライアントデバイス上の前記変更された少なくとも１つのスクリプトのランタイム実行が、前記クライアントデバイスから前記クラウドアプリケーションへの今後の要求を、前記サフィックスを付加されたネットワークアドレスにリダイレクションさせる、ステップと
を含む、方法。
【請求項２】
前記受信されたウェブページにおいて指定された各静的ネットワークアドレスを変更するステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
静的ネットワークアドレスにサフィックスを付加するステップが、
前記静的ネットワークアドレスを識別するために前記ウェブページをパースするステップと、
前記あらかじめ定義されたネットワークアドレスで前記少なくとも１つのスクリプトにおいて指定される各識別された静的ネットワークアドレスにサフィックスを付加するステップと
をさらに含む、請求項２に記載の方法。
【請求項４】
変更される前記ネットワークアドレスのそれぞれが、ネットワークアドレスのリストに含まれる、請求項３に記載の方法。
【請求項５】
変更される前記ネットワークアドレスのそれぞれが、少なくともユニフォームリソースロケータ（ＵＲＬ）である、請求項４に記載の方法。
【請求項６】
前記少なくとも１つのスクリプトが、
ネットワークアドレスを生成するためにおそらく構成された実行可能命令を識別するために、前記要求されるコンテンツをパースするステップと、
代替的(alternative)命令を呼び出すために前記各識別された命令をラップする(wrapping)ステップであって、前記代替的命令が、前記あらかじめ定義されたネットワークアドレスにサフィックスを付加して前記生成されたアドレスにするようにおそらく(possibly)構成された、ステップと
をさらに含む、請求項１に記載の方法。
【請求項７】
ランタイム中に、前記ネットワークアドレスに影響を与えない少なくとも１つのラップされた命令を検出するステップと、
前記ネットワークアドレスに影響を与えない前記少なくとも１つのラップされた命令に適用される前記それぞれのラッパーを無視するステップと
をさらに含む、請求項６に記載の方法。
【請求項８】
前記少なくともスクリプトが、ＪａｖａＳｃｒｉｐｔコード、およびＣａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔｓ（ＣＳＳ）ファイルのうちのいずれか１つである、請求項６に記載の方法。
【請求項９】
前記各識別された命令をラップすることが、
前記少なくとも１つのスクリプトを抽象構文木(abstract syntax tree)に変換するステップと、
前記抽象構文木を再帰的にトラバースするステップと、
前記抽象構文木のノードをラップして、パッチされた抽象構文木を生成するステップと
をさらに含む、請求項６に記載の方法。
【請求項１０】
前記パッチされた抽象構文木から前記変更された少なくとも１つのスクリプトを再構築するステップ
をさらに含む、請求項６に記載の方法。
【請求項１１】
前記少なくとも１つのスクリプトおよび前記変更されたスクリプトをキャッシュするステップ
をさらに含む、請求項６に記載の方法。
【請求項１２】
前記少なくとも１つのスクリプトをロードする要求を識別すると、少なくとも１つの変更されたスクリプトがキャッシュされているかどうかを決定するステップと、
前記少なくとも１つのクラウドアプリケーションを実行するリモートサーバから前記要求されたコンテンツを検索することなく、前記キャッシュされた、変更されたスクリプトを前記クライアントデバイスに送るステップと
をさらに含む、請求項１に記載の方法。
【請求項１３】
デフォルトクライアントデバイス構成のいかなる変更も必要とせずに実際される、請求項１に記載の方法。
【請求項１４】
前記ウェブページのＤＯＭを変えようとするいかなる試みをも監視するために、前記少なくとも１つのスクリプトをサンドボックスで実行するステップと、
前記ＤＯＭへのネットワークアドレスのいかなる書込みにも、ランタイム中にサフィックスを付加するステップと、
前記ＤＯＭからのネットワークアドレスのいかなる読取りにも、ランタイム中にサフィックスを付加しないステップと
をさらに含む、請求項６に記載の方法。
【請求項１５】
前記ＤＯＭへのアクセスを監視するステップと、
前記ＤＯＭを変更する可能性がある少なくとも１つの動作を防止するステップと
をさらに含む、請求項１４に記載の方法。
【請求項１６】
前記少なくとも１つの動作が、前記クライアントデバイスへのプラグインのロード、クロスドメインアクセス、および前記ウェブページと前記ウェブサーバとの間の非同期要求のうちのいずれか１つを含む、請求項１５に記載の方法。
【請求項１７】
サフィックスプロキシデバイスによって実施される、請求項１に記載の方法。
【請求項１８】
１つまたは複数の処理装置に請求項１に記載の方法を実行させるための命令を記憶した、非一時的コンピュータ可読媒体。
【請求項１９】
少なくとも１つのクラウドアプリケーションのネットワークアドレスを変更するためのシステムであって、
プロセッサと、
前記プロセッサによって実行されるとき、
前記少なくとも１つのクラウドアプリケーションからクライアントデバイスへ送られたウェブページを受信することであって、ウェブページが、ランタイム中に前記クライアントデバイスにロードされる少なくとも１つのスクリプトを指定する、受信することと、
前記ウェブページに１つのコードを注入することと、
前記注入された１つのコードによって、前記少なくとも１つのスクリプトのそれぞれをロードする試みを受信することと、
あらかじめ定義されたネットワークアドレスで前記少なくとも１つのスクリプトにおいて指定される各ネットワークアドレスにサフィックスを付加することによって、前記少なくとも１つのスクリプトを変更することと、
前記変更された少なくとも１つのスクリプトを前記クライアントデバイスに送ることであって、前記クライアントデバイス上の前記変更された少なくとも１つのスクリプトのランタイム実行が、前記クライアントデバイスから前記クラウドアプリケーションへの今後の要求を、前記サフィックスを付加されたネットワークアドレスにリダイレクションさせる、送ることと
を行うように前記システムを構成する命令を含んだメモリと
を含む、システム。
【請求項２０】
前記システムがさらに、
前記受信されたウェブページにおいて指定された各静的ネットワークアドレスを変更する
ように構成される、請求項１９に記載のシステム。
【請求項２１】
前記システムがさらに、
前記静的ネットワークアドレスを識別するために前記ウェブページをパースし、
前記あらかじめ定義されたネットワークアドレスで前記少なくとも１つのスクリプトにおいて指定される各識別された静的ネットワークアドレスにサフィックスを付加する
ように構成される、請求項２０に記載のシステム。
【請求項２２】
変更される前記ネットワークアドレスのそれぞれが、ネットワークアドレスのリストに含まれる、請求項２１に記載のシステム。
【請求項２３】
変更される前記ネットワークアドレスのそれぞれが、少なくともユニフォームリソースロケータ（ＵＲＬ）である、請求項２２に記載のシステム。
【請求項２４】
前記システムがさらに、
ネットワークアドレスを生成するためにおそらく構成された実行可能命令を識別するために、前記要求されるコンテンツをパースすることと、
代替的命令を呼び出すために前記各識別された命令をラップすることであって、前記代替的命令が、前記あらかじめ定義されたネットワークアドレスにサフィックスを付加して前記生成されたアドレスにする、ラップすることと
を行うようにおそらく構成される、請求項１９に記載のシステム。
【請求項２５】
前記システムがさらに、
ランタイム中に、前記ネットワークアドレスに影響を与えない少なくとも１つのラップされた命令を検出し、
前記ネットワークアドレスに影響を与えない前記少なくとも１つのラップされた命令に適用される前記それぞれのラッパーを無視する
ように構成される、請求項２４に記載のシステム。
【請求項２６】
前記少なくともスクリプトが、ＪａｖａＳｃｒｉｐｔコード、およびＣａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔｓ（ＣＳＳ）ファイルのうちのいずれか１つである、請求項２４に記載のシステム。
【請求項２７】
前記システムがさらに、
前記少なくとも１つのスクリプトを抽象構文木に変換し、
前記抽象構文木を再帰的にトラバースし、
前記抽象構文木のノードをラップして、パッチされた抽象構文木を生成する
ように構成される、請求項２４に記載のシステム。
【請求項２８】
前記システムがさらに、
前記パッチされた抽象構文木から前記変更された少なくとも１つのスクリプトを再構築する
ように構成される、請求項２４に記載のシステム。
【請求項２９】
前記システムがさらに、
前記少なくとも１つのスクリプトおよび前記変更されたスクリプトをキャッシュする
ように構成される、請求項２４に記載のシステム。
【請求項３０】
前記システムがさらに、
前記少なくとも１つのスクリプトをロードする要求を識別すると、少なくとも１つの変更されたスクリプトがキャッシュされているかどうかを決定し、
前記少なくとも１つのクラウドアプリケーションを実行するリモートサーバから前記要求されたコンテンツを検索することなく、前記キャッシュされた、変更されたスクリプトを前記クライアントデバイスに送る
ように構成される、請求項１９に記載のシステム。
【請求項３１】
前記システムがさらに、
前記ウェブページのＤＯＭを変えようとするいかなる試みをも監視するために、前記少なくとも１つのスクリプトをサンドボックスで実行し、
前記ＤＯＭへのネットワークアドレスのいかなる書込みにも、ランタイム中にサフィックスを付加し、
前記ＤＯＭからのネットワークアドレスのいかなる読取りにも、ランタイム中にサフィックスを付加しない
ように構成される、請求項２４に記載のシステム。
【請求項３２】
前記システムがさらに、
前記ＤＯＭへのアクセスを監視し、
前記ＤＯＭを変更する可能性がある少なくとも１つの動作を防止する
ように構成される、請求項３１に記載のシステム。
【請求項３３】
前記少なくとも１つの動作が、前記クライアントデバイスへのプラグインのロード、クロスドメインアクセス、および前記ウェブページと前記ウェブサーバとの間の非同期要求のうちのいずれか１つを含む、請求項３２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[0001]本出願は、２０１４年９月１２日に出願された米国仮特許出願第６２／０４９，４７３号の利益を主張する。本出願はまた、その内容が参照により本明細書に組み込まれる、２０１４年１１月１２日に出願された米国特許出願第１４／５３９，９８０号の一部継続出願である。
【０００２】
[0002]本出願は一般に、通信を監視し安全にすることによって、特にサフィックスプロキシ（suffix proxy）を使用することによって、通信ネットワークおよびシステムを安全にすることに関する。
【背景技術】
【０００３】
[0003]近年、ますます多くのプロバイダが、クラウドにコンピューティング環境を作成する能力を提供している。たとえば、Ａｍａｚｏｎ  Ｗｅｂ  Ｓｅｒｖｉｃｅｓ（商標）（ＡＷＳとしても知られる）が２００６年に、クラウドプラットフォーム上で実行されるアプリケーションに合わせて調整された環境全体を構成する能力をユーザに提供するサービスを開始した。一般に、そのようなサービスは、コンピューティング資源がアプリケーションの効率的な実行を支援するように利用される、スケーラブルなアプリケーションの開発を可能にする。
【０００４】
[0004]クラウドベースのアプリケーションを開発、提供、または場合によっては管理する組織および会社は、これらのサービスに依存し、複雑なウェブサイトから、サービスとしてのソフトウェア（ＳａａＳ：software-as-service）配信モデルとして提供されるアプリケーションおよびサービスまで、様々なタイプの環境を実現することに慣れている。そのようなサービスおよびアプリケーションは、まとめて「クラウドアプリケーション」と呼ばれる。
【０００５】
[0005]クラウドアプリケーションは、一般的に、ユーザがウェブブラウザを介してクライアントデバイスを使用することによってアクセスされる。クラウドアプリケーションは、とりわけ、ｅコマースアプリケーション、ソーシャルメディアアプリケーション、企業アプリケーション、ゲームアプリケーション、メディア共有アプリケーション、ストレージアプリケーション、ソフトウェア開発アプリケーションなどを含む。多くの個々のユーザ、会社、および企業が、ローカルにインストールされ、管理される「従来の」ソフトウェアアプリケーションの代わりにクラウドアプリケーションに注目している。たとえば、企業は、企業によって管理されるＥｘｃｈａｎｇｅ（登録商標）サーバを所有するのではなく、電子メールアカウントにＯｆｆｉｃｅ（登録商標）３５６オンラインサービスを使用することができる。
【０００６】
[0006]企業は、クラウドベースのＳａａＳ提供をますます採用するようになっている。これらのサービスは、様々なネットワークセキュリティリスクにさらされている。これらのネットワークを安全にするための知られているシステムは、ＳａａＳを動作させているサーバと、ユーザによって動作されるエンドポイントとの間のトラフィックを調べることによって動作する。これらの知られているネットワークセキュリティシステムは、一般的に、システムの複雑性を増大させるエンドポイントの複雑な構成を必要とする。
【０００７】
[0007]さらに、多くの場合、エンドポイントは、企業の完全な制御下にないことがあり、全く管理されない、または場合によっては構成できないことがある。ユーザ制御のエンドポイントを構成および管理することに固有の難しさに加えて、ネットワークアドレスが動的に生成されるときセッション全体に対してトラフィックの捕捉（traffic captivation）を保証することが困難である。
【０００８】
[0008]その上、Ｇｏｏｇｌｅ（登録商標）Ａｐｐｓプラットフォームなど、最近のウェブ／クラウドアプリケーションは、大量のクライアント側コード（JavaScript）を利用する。これは、基本的なプロキシ機能が不十分であり、クライアント側コードへのさらなる介入が必要とされるとき、サフィックスプロキシ実装をさらに困難にする可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
[0009]したがって、ＨＴＴＰトラフィックの取込みおよび再構成のための従来技術の欠陥を克服する解決策を提供することが有利となる。
【課題を解決するための手段】
【００１０】
[0010]次に本開示のいくつかの例示的な実施形態の要約を示す。この要約は、そのような実施形態の基本的な理解をもたらすために読者の便宜のために提供され、本開示の広さを完全に定義するものではない。この要約は、検討されるすべての実施形態の包括的な概要ではなく、すべての実施形態の鍵となる要素または決定的要素を明らかにすることも、任意またはすべての実施形態の範囲を明確に述べることも意図されていない。その唯一の目的は、後に示すより詳細な説明への前置きとして、１つまたは複数の実施形態のいくつかの概念を簡単な形で提示することである。便宜のために、いくつかの実施形態という用語は、本明細書では、開示の単一の実施形態または複数の実施形態を指すのに使用され得る。
【００１１】
[0011]開示のいくつかの実施形態は、少なくとも１つのクラウドアプリケーションのネットワークアドレスを変更するための方法に関する。この方法は、少なくとも１つのクラウドアプリケーションからクライアントデバイスに送られるウェブページを受信するステップであって、ウェブページが、ランタイム中にクライアントデバイスにロードされる少なくとも１つのスクリプトを指定する、ステップと、ウェブページに１つのコードを注入するステップと、注入された１つのコードによって、少なくとも１つのスクリプトのそれぞれをロードする試みを受信するステップと、あらかじめ定義されたネットワークアドレスで少なくとも１つのスクリプトにおいて指定される各ネットワークアドレスにサフィックスを付加すること（suffixing）によって少なくとも１つのスクリプトを変更するステップと、変更された少なくとも１つのスクリプトをクライアントデバイスに送るステップであって、クライアントデバイスでの変更された少なくとも１つのスクリプトのランタイム実行が、クライアントデバイスからクラウドアプリケーションへの今後の要求を、サフィックスを付加されたネットワークアドレスへリダイレクトさせる、ステップとを含む。
【００１２】
[0012]開示のいくつかの実施形態は、少なくとも１つのクラウドアプリケーションのネットワークアドレスを変更するためのシステムに関する。このシステムは、プロセッサと、プロセッサによって実行されるとき、少なくとも１つのクラウドアプリケーションからクライアントデバイスに送られるウェブページを受信することであって、ウェブページが、ランタイム中にクライアントデバイスにロードされる少なくとも１つのスクリプトを指定する、受信することと、ウェブページに１つのコードを注入することと、注入された１つのコードによって、少なくとも１つのスクリプトのそれぞれをロードする試みを受信することと、あらかじめ定義されたネットワークアドレスで少なくとも１つのスクリプトにおいて指定される各ネットワークアドレスにサフィックスを付加することによって少なくとも１つのスクリプトを変更することと、変更された少なくとも１つのスクリプトをクライアントデバイスに送ることであって、クライアントデバイスでの変更された少なくとも１つのスクリプトのランタイム実行が、クライアントデバイスからクラウドアプリケーションへの今後の要求を、サフィックスを付加されたネットワークアドレスへリダイレクトさせる、送ることとを行うようにシステムを構成する命令を含んだメモリとを備える。
【００１３】
[0013]本明細書に開示される主題は、本明細書の終わりの特許請求の範囲に詳細に指摘され、明確に請求される。開示する実施形態の前述のまたは他の目的、特徴、および利点は、添付の図面と併せて行う次の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１４】
【図１】[0014]開示する様々な実施形態を説明するために利用されるネットワーク化されたシステムの図である。
【図２】[0015]一実施形態によるセキュリティサンドボックスの動作を説明するフローチャートである。
【図３】[0016]一実施形態によるＤＯＭへの変化を制御するための方法を説明するフローチャートである。
【図４】[0017]一実施形態により実施されるサフィックスプロキシのブロック図である。
【発明を実施するための形態】
【００１５】
[0018]本明細書に開示する実施形態は、本明細書中の革新的な教示の多くの有利な用途の例にすぎないことに留意することが重要である。一般に、本出願の明細書に記載することは、請求される様々な実施形態のいずれかを必ずしも限定するものではない。さらに、いくつかの記載は、いくつかの発明の特徴に適用するが、他には適用しないことがある。一般に、別段の指示がない限り、単数の要素が、一般性を失わず、複数であることがあり、逆もまた同様である。図面では、複数の図を通して同様の参照符号が同様の部分を指す。
【００１６】
[0019]例として、開示する様々な実施形態は、ネットワークベースのサービスとしてのソフトウェア（ＳａａＳ）とクライアントとの間のネットワークトラフィック上で動作するように構成され得る。下記でさらに詳細に説明するように、開示する実施形態は、ＳａａＳプロバイダに向けられたネットワークアドレスの非侵入型のサフィックス付加およびサフィックス非付加（un-suffixing）を可能にする。
【００１７】
[0020]図１は、開示する様々な実施形態を説明するために利用されるネットワーク化されたシステム１００の例示的および非限定的な図である。ネットワーク化されたシステム１００は、その中で実行されるアプリケーションまたはサービスにコンピューティング資源を提供するプライベートクラウド、パブリッククラウド、またはハイブリッドクラウドであることがあるクラウドコンピューティングプラットフォーム１１０を含む。一実施形態では、クラウドコンピューティングプラットフォーム１１０は、ＳａａＳプラットフォームであり得る。
【００１８】
[0021]クラウドベースのアプリケーションを開発、提供、または場合によっては管理する組織および会社は、これらのサービスに依存し、複雑なウェブサイトから、ＳａａＳ配信モデルとして提供されるアプリケーションおよびサービスまで、様々なタイプの環境を実現することに慣れてきた。そのようなサービスおよびアプリケーションは、まとめて「クラウドアプリケーション１１５」と呼ばれる。
【００１９】
[0022]クラウドアプリケーション１１５は、一般的に、ユーザがウェブブラウザを介してクライアントデバイスを使用することによってアクセスされる。クラウドアプリケーション１１５は、とりわけ、ｅコマースアプリケーション、ソーシャルメディアアプリケーション、企業アプリケーション、ゲームアプリケーション、メディア共有アプリケーション、ストレージアプリケーション、ソフトウェア開発アプリケーションなどを含む。多くの個々のユーザ、会社、および企業が、ローカルにインストールされ、管理される「従来の」ソフトウェアアプリケーションの代わりにクラウドアプリケーションに注目している。たとえば、企業は、企業によって管理されるＥｘｃｈａｎｇｅ（登録商標）サーバを所有するのではなく、電子メールアカウントにＯｆｆｉｃｅ（登録商標）３５６オンラインサービスを使用することができる。
【００２０】
[0023]ネットワーク化されたシステム１００はさらに、ネットワーク１５０に通信可能に接続された、管理ネットワークプロキシ１２０と、クライアントデバイス１３０−１〜１３０−Ｎと、サフィックスプロキシ１４０とを含む。ネットワーク１５０は、たとえば、ワイドエリアネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、インターネットなどであり得る。クライアントデバイス１３０のそれぞれは、たとえば、パーソナルコンピュータ、ラップトップ、タブレットコンピュータ、スマートフォン、ウェアラブルコンピューティングデバイス、または任意の他のコンピューティングデバイスを含み得る。
【００２１】
[0024]クライアントデバイス１３０は、クラウドコンピューティングプラットフォーム１１０において実行される１つまたは複数のクラウドアプリケーション１１５にアクセスするように構成される。クライアントデバイス１３０は、管理デバイスまたは非管理デバイスであり得る。管理デバイスは、一般には、組織のＩＴ職員によってセキュリティ保護され、非管理デバイスはされない。上記の例を参照すると、仕事のコンピュータは管理されるデバイスであるが、自宅のコンピュータは管理されないデバイスである。
【００２２】
[0025]管理ネットワークプロキシ１２０は、クラウドコンピューティングプラットフォーム１１０におけるいずれかまたはすべてのトラフィックおよび活動を保護するように構成される。詳細には、管理ネットワークプロキシ１２０は、クライアントデバイス１３０とクラウドコンピューティングプラットフォーム１１０との間のネットワーク通信トラフィックをインターセプト、監視、変更、および転送するように使用され得る。
【００２３】
[0026]管理ネットワークプロキシ１２０は、クラウドアプリケーション１１５および／またはクラウドコンピューティングプラットフォーム１１０のインフラストラクチャに対するネットワーク脅威を検出し、軽減するように構成され得る。非限定的な例として、管理ネットワークプロキシ１２０は、疑わしいネットワークトラフィックおよび挙動を通知する、脅威をブロックする、ネットワークトラフィック上のアプリケーション制御、ＵＲＬフィルタリング、およびマルウェア対策を行う、アプリケーション層パラメータへの可視性（たとえば、ユーザ、デバイス、場所などのリスト）を確立する、クラウドアプリケーション１１５を使用するユーザのプロファイルを生成する、特定のまたはあらかじめ定義されたイベント時に警告を提供する、監査ログを生成する、その他を行うように構成され得る。管理ネットワークプロキシ１２０のアーキテクチャおよび動作は、共通の譲受人に譲渡され、参照により本明細書に組み込まれている米国特許出願第１４／５３９，９８０号において説明されている。
【００２４】
[0027]いくつかの実施形態によれば、サフィックスプロキシ１４０は、管理ネットワークプロキシ１２０のホールド内のプロキシされたウェブページのＵＲＬおよびウェブアクセスを維持するように構成される。すなわち、クラウドアプリケーション１１５のウェブページにアクセスする要求に対してサフィックスプロキシ１４０によって行われる変更は、その後のトラフィックを管理ネットワークプロキシ１２０に向かわせることを可能にする。
【００２５】
[0028]一実施形態では、サフィックスプロキシ１４０は、ネットワークトラフィックを調べ、クラウドベースのアプリケーション１１５のアドレスを検出するように構成され得る。そのようなアドレスの例は、たとえば、ユニフォームリソースロケータ（ＵＲＬ）、ユニフォームリソース識別子（ＵＲＩ）などを含む。非限定的な例として、サフィックスプロキシ１４０は、検査のためにネットワークトラフィックを逆コンパイル、分解、または逆アセンブルすることができる。
【００２６】
[0029]一実施形態では、直接クラウドアプリケーション１１５にアクセスするようクライアントデバイス１３０を導くネットワークアドレスが、クライアントデバイス１３０に提供されないように、サフィックスプロキシ１４０は、ウェブページならびにそこでおよびクラウドコンピューティングプラットフォーム１１０上で実行されるコード（たとえば、ＪａｖａＳｃｒｉｐｔ）を変更するように構成され得る。そのようなネットワークアドレスが検出される場合、サフィックスプロキシ１４０は、たとえば、あらかじめ定義されたドメイン名を元のネットワークアドレスに付け加えて、そのアドレスを書き換えるように構成される。付加されたドメイン名はブラウザを、管理ネットワークプロキシ１２０に差し向け得る、またはリダイレクトし得る。たとえば、ＵＲＬ（ネットワークアドレス）ｈｔｔｐ：／／ｗｗｗ．ｓｏｍｅｓｉｔｅ．ｃｏｍは、ｈｔｔｐ：／／ｗｗｗ．ｓｏｍｅｓｉｔｅ．ｃｏｍ．ｎｅｔｗｏｒｋ−ｐｒｏｘｙ−ｓｅｒｖｉｃｅ．ｃｏｍを介してアクセスされることになる。ネットワークアドレスを書き換えるための様々な実施形態を、下記に開示する。
【００２７】
[0030]サフィックスプロキシ１４０は、クラウドアプリケーション１１５から送られた、ウェブページを含む任意のコンテンツを変更するように構成され得る。サフィックスプロキシ１４０は、コンテンツに存在する参照されるページおよび／またはＵＲＬを識別し、それらのＵＲＬを書き換えるために、任意のコンテンツを調べるおよび／または逆コンパイルするように構成され得る。非限定的な例として、処理されるファイルタイプは、ＨＴＭＬまたはＪａｖａＳｃｒｉｐｔを含むことができ、応答は、圧縮応答またはチャンク応答を含むことができる。
【００２８】
[0031]一実施形態では、静的ウェブページについては、そのようなウェブページに埋め込まれているＵＲＬに対して、あらかじめ定義されたサフィックスドメイン名が付加される。このために、サフィックスプロキシ１４０は、ＨＴＭＬウェブページをパースし、正規表現を使用して検出されたＵＲＬを置き換えるように構成される。静的ウェブページは、クライアントにより実行可能なスクリプト（たとえば、ＪａｖａＳｃｒｉｐｔ）コードを含んでいないウェブページである。
【００２９】
[0032]別の実施形態によれば、動的ウェブページ中のネットワークアドレスにサフィックスを付加するために、サフィックスプロキシ１４０は、クライアントデバイス１３０のブラウザにロードされているコードまたはスクリプトを分析し、変更するように構成される。たとえば、ＪａｖａＳｃｒｉｐｔは、クラウドアプリケーション１１５に直接アクセスするネットワークアドレスのいかなる潜在的な生成もラップするために、サフィックスプロキシ１４０によって変更され得る。直接アクセスアドレスが識別される場合、スクリプトおよび／またはスクリプトによって生成されるコンテンツは、管理ネットワークプロキシ１２０を参照するようにアドレスを書き換えるように変更され得る。
【００３０】
[0033]一実施形態では、サフィックスプロキシ１４０は、クライアントデバイス１３０を通じて実行されるランタイムコンポーネントであるセキュリティサンドボックスを提供するように構成される。セキュリティサンドボックスのある機能は、サフィクスプロキシにおいて行われ得る。セキュリティサンドボックスは、セキュリティサンドボックス１４５と表示されている。一実施形態では、セキュリティサンドボックス１４５は、ウェブページのドキュメントオブジェクトモデル（ＤＯＭ）へのアクセスを防止するように構成される。詳細には、セキュリティサンドボックス１４５は、スクリプトのランタイム中にＤＯＭへのいかなるアクセスおよび変更も防止する。ＤＯＭへのアクセスを防止するためのセキュリティサンドボックス１４５の動作は、クライアントデバイス１３０および／またはブラウザで、プラグイン、アドオンなど、いかなるソフトウェアのいかなるインストールも必要としないことに留意されたい。
【００３１】
[0034]一般に、クライアントデバイス１３０上のブラウザが、ランタイム中にウェブページのＤＯＭを変えるスクリプト（たとえば、ＪａｖａＳｃｒｉｐｔ）を実行し得る。その結果、クライアントデバイス１３０のブラウザがサフィックスを付加しないＵＲＬを用いてＤＯＭ要素を作成または変更することが可能である。そのようなアクションを防止するために、セキュリティサンドボックス１４５、およびしたがってサフィックスプロキシ１４０は、埋め込まれたまたはロードされた任意のスクリプトコードのＤＯＭへのアクセスを制限するように構成される。
【００３２】
[0035]一実施形態では、制限の内容は、ウェブページで実行される元のスクリプトによるＤＯＭ中のＵＲＬへの変更が、セキュリティサンドボックス１４５によって監視されるようなものであり得る。サフィックスプロキシ１４０によるスクリプトコード監視は、ＤＯＭ要素への読み書きアクセスに対して呼び出され得る。すなわち、ＤＯＭへのＵＲＬの書込みは、あらかじめ定義されたドメイン名でサフィックスを付加され、ＤＯＭからのＵＲＬの読取りは、サフィックスを付加されない。その結果、「ユーザ」コード（たとえば、ウェブアプリケーションのコード）によって見られるＵＲＬと、ブラウザ自体（ＤＯＭ、およびそのＪａｖａＳｃｒｉｐｔ表現）によって見られるＵＲＬとの間に分離が存在し得る。その結果、元のスクリプトコードは、セキュリティサンドボックス１４５によって効果的に管理および制御されることが可能であり、（プロキシ周辺の）元のサーバとのいかなる通信も防止される。元のスクリプトは、ウェブページに動的にロードされない、ウェブページに埋め込まれた任意のスクリプトであることに留意されたい。
【００３３】
[0036]いくつかの構成では、ウェブページがブラウザにレンダリングされた後、スクリプトがウェブページにロードされ得る。そのようなスクリプトは、ＨＴＭＬページ内部のインラインスクリプト、および任意のコードファイル、スクリプトファイル、またはコンテンツファイルを含め、いくつかの形式のいずれかを使用して、（もともとページを供給するように構成された）サーバからダウンロードされる。そのようなファイルの例は、たとえば、ＪａｖａＳｃｒｉｐｔ、Ｃａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔｓ（ＣＳＳ）などを含む。
【００３４】
[0037]一般に、クライアントデバイス１３０のブラウザは、まず、メインＨＴＭＬページをロードし、その後、続いてすべての参照されるスクリプトおよびインラインスクリプトをロードする。さらに、スクリプトは、たとえば、「ｅｖａｌ」ステートメントを使用して、ウェブアプリケーションによって動的にロードされることも可能である。
【００３５】
[0038]動的コードローディングは最初に、静的にロードされたコード（または、以前にロードされた、他の動的コード）によって行われるので、セキュリティサンドボックス１４５は、ウェブページがブラウザにダウンロードされるとき、静的スクリプトコードを変更することによって実行を制御することができる。コードに対する変更は、今後の動的にロードされるコードがランタイム中に変更されるように行われることが可能であり、いくつかのＵＲＬのサフィックス付加を実施するために、ＤＯＭに対する特定の変化はインターセプトされ得る。これは、ウェブページがサフィックスプロキシ１４０の制御下にとどまることを可能にする。
【００３６】
[0039]一実施形態では、サフィックスプロキシ１４０およびセキュリティサンドボックス１４５は、ロードされた動的コードを変更するように構成される。ロードされたコードは、潜在的に（明示的にまたは暗黙的に）ネットワークアドレス（ＵＲＬ）を含む、指す、または場合によっては参照するすべての要素を決定するためにコードを分析し、ネットワークアドレスのサフィックス付加を実施するコード内の要素を置き換えるおよび／またはラップするように構成されたサフィックスプロキシ１４０で受信される。新しいスクリプトコードは、クライアントデバイス１３０のブラウザにロードされる。いくつかの実施形態では、性能を高めるために、スクリプトコードのキャッシングが使用され得る。ランタイム中のサンドボックス１４５は、ネットワークアドレスのサフィックス付加およびサフィックス非付加を実施するために、ラッパーを分解する。上記のように、サフィックスまたはネットワークアドレスを実施することは、あらかじめ定義されたドメイン名でＤＯＭへのアドレス（たとえば、ＵＲＬ）の書込みにサフィックスを付加すること、およびＤＯＭからのアドレスの任意の読取りにサフィックスを付加しないことを含む。
【００３７】
[0040]非限定的な例として、少なくとも次のＤＯＭ要素およびプロパティは、新しいスクリプトコードの作成中にラップされ得る：
プロパティ：「ｓｒｃ」、「ｈｒｅｆ」、および「ａｃｔｉｏｎ」とともに、「ＩＦＲＡＭＥ」、「ＳＴＹＬＥ」、「ＬＩＮＫ」、「ＩＭＧ」、「ＡＵＤＩＯ」、「Ａ」、「ＦＯＲＭ」、「ＢＡＳＥ」、および「ＳＣＲＩＰＴ」など、ＵＲＬを含んだＨＴＭＬ要素のプロパティ。これらの要素のｇｅｔＡｔｔｒｉｂｕｔｅおよびｓｅｔＡｔｔｒｉｂｕｔｅメソッドもまた、前述のプロパティを設定するために使用され得る。
【００３８】
[0041]ＤＯＭサブツリーを含むことができるＨＴＭＬ要素（すなわち、さらなるＨＴＭＬ）のプロパティ。そのような要素に対して、「ａｐｐｅｎｄＣｈｉｌｄ」メソッドは、動的に要素（およびコード）を追加するために使用されることが可能であり、「ｉｎｎｅｒＨＴＭＬ」プロパティは、余分なコードを追加するために使用されることが可能である。
【００３９】
[0042]「ｄｏｃｕｍｅｎｔ」オブジェクトのプロパティは、「ｃｏｏｋｉｅ」および「ｄｏｍａｉｎ」（ともにウィンドウの元のドメインを含み得る）など、ＵＲＬまたはホスト名を含み得る。「ｗｒｉｔｅ」メソッドは、要素およびコードをページに追加するために使用され得る。
【００４０】
[0043]ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトの「ｏｐｅｎ」メソッドが、リクエストＵＲＬを含む。ＭｅｓｓａｇｅＥｖｅｎｔオブジェクトの「ｏｒｉｇｉｎ」プロパティが、オリジンホスト名を含む。「Ｗｉｎｄｏｗ」オブジェクトのメソッドおよびプロパティが、「ｌｏｃａｔｉｏｎ」、「ｐｏｓｔＭｅｓｓａｇｅ」、「ｅｖａｌ」、および「ｅｘｅｃＳｃｒｉｐｔ」を含む。「ｌｏｃａｔｉｏｎ」が、フレームを別のＵＲＬへリダイレクトする、またはフレームの現在の位置を決定する。「ｐｏｓｔＭｅｓｓａｇｅ」メソッドは、オリジン引数を有する。「ｅｖａｌ」および「ｅｘｅｃＳｃｒｉｐｔ」プロパティは、コードを動的にロードするために使用される。他のそのような要素およびプロパティが存在し、それらのいずれかまたはすべてがラップされ得る。
【００４１】
[0044]一実施形態では、ＤＯＭ要素のラッピング、したがって新しいコードの作成は、コードの静的フッキングを使用して行われる。非限定的な移植では、静的フッキングは、ウェブページのＨＴＭＬコード中のインラインスクリプトを処理し、抽出することを含む。次いで、任意のスクリプトコードが、抽象構文木（ＡＳＴ：Abstract Syntax Tree）などの構文木に変換される。例示的な実施形態では、ＡＳＴは、Ｍｏｚｉｌｌａ（登録商標）パーサを使用して生成され得る。構文木は、再帰的にトラバースされ、ラッパーへの呼び出しが、フッキングを可能にするために木のいくつかのノードに挿入される。最終的に、新しいコードは、（挿入されたクラスで）変更されたノードから作成され、クライアントデバイス１３０のブラウザに送られる。一実施形態では、作成された新しいコードは、さらなる使用に備えてキャッシュされ得る。
【００４２】
[0045]挿入されたラッパーは、ＤＯＭ変化がランタイム中にインターセプトされることを可能にし得ることに留意されたい。ラッパーは、いずれかまたはすべての潜在的なＤＯＭアクセスをカバーするために適用され得る。非限定的な例として、ラッパーは、いくつかのまたはすべての以下の構文木（ＡＳＴ）ノードに適用（挿入）され得る：「ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎ」、「Ｉｄｅｎｔｉｆｉｅｒ」、「ＡｓｓｉｇｎｍｅｎｔＥｘｐｒｅｓｓｉｏｎ」、および「ＣａｌｌＥｘｐｒｅｓｓｉｏｎ」。ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎノードについては、ＤＯＭオブジェクトのオブジェクトプロパティへの任意の潜在的アクセス、非リテラルキーを用いたサブスクリプション動作、およびプロパティ名が「ｉｎｔｅｒｅｓｔｉｎｇ」プロパティのホワイトリストに一致した特定のプロパティ（たとえば、ｏｂｊ．ｓｒｃ）へのアクセスがラップされる。一実施形態では、ラッパーは、任意の適切なオブジェクトをラップするために挿入される。したがって、いくつかのラッパーは必要とされないことがある。セキュリティサンドボックス１４５は、ラッパーが処理されるべきかどうかを決定する。ほとんどの場合、たとえば「誤検出（false positive）」の場合、ラッパーは何もしないことを決定することになる。
【００４３】
[0046]「Ｉｄｅｎｔｉｆｉｅｒ」ノードについては、（ウィンドウＤＯＭオブジェクト、たとえば「ｌｏｃａｔｉｏｎ」のプロパティである）グローバル識別子のホワイトリストへの任意の潜在的なアクセスがラップされる。Ｉｄｅｎｔｉｆｉｅｒ  ＡＳＴノードは、木中の多くの関係のない論理的位置に現れ得ることに留意すべきである。Ｉｄｅｎｔｉｆｉｅｒがグローバル変数へのアクセスを表すインスタンスはラップされる。これは、親ノードをチェックし、他のすべての場合を消去することによって、トラバースステップ中に決定される。
【００４４】
[0047]ＡｓｓｉｇｎｍｅｎｔＥｘｐｒｅｓｓｉｏｎノードについては、「＝」および「＋＝」代入演算子は、関連するＤＯＭプロパティが文字列（ＵＲＬ）であるとき、ラップされる。以前に「マークされた」ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎｓおよびＩｄｅｎｔｉｆｉｅｒｓへの代入は、詳細には「設定された」アクセスを処理する別のラッパーによって処理される。
【００４５】
[0048]ＣａｌｌＥｘｐｒｅｓｓｉｏｎノードについては、以前に「マークされた」ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎまたはＩｄｅｎｔｉｆｉｅｒが呼び出し対象（callee）であるＣａｌｌＥｘｐｒｅｓｓｉｏｎは、詳細には関数呼び出しを処理する別のラッパーによって処理される。ステートメントのように振る舞うが、ＡＳＴでは関数呼び出しとして表される「ｅｖａｌ」への呼び出しを有する特別な場合が存在する。
【００４６】
[0049]様々な実施形態によれば、異なるラッパー関数が、構文木のトラバースに従って定義され得る。異なるラッパー関数は、ランタイム中に異なるように振る舞う。ラッパー関数は、ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎｓへのアクセスをラップするために使用されるｗｒａｐｐｅｄ＿ｇｅｔ、ｗｒａｐｐｅｄ＿ｓｅｔ、およびｗｒａｐｐｅｄ＿ｃａｌｌを含む。関数ｗｒａｐｐｅｄ＿ｎａｍｅ＿ｇｅｔ、ｗｒａｐｐｅｄ＿ｎａｍｅ＿ｓｅｔ、およびｗｒａｐｐｅｄ＿ｎａｍｅ＿ｃａｌｌは、グローバル識別子にアクセスするために使用される。関数ｗｒａｐｐｅｄ＿ｅｖａｌ＿ｐａｒａｍは、詳細には、（ローカルスコープに影響を与えることができ、したがって装飾されることは可能ではない）「ｅｖａｌ」呼び出しのパラメータとして渡されるコードを処理する。
【００４７】
[0050]いくつかの実施形態では、セキュリティサンドボックス１４５は、関連するオブジェクトまたはプロパティでラッパーが呼び出されたかどうかをまず検出するように構成される。詳細には、「ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎ」ラッパーについては、プロパティ名は、ホワイトリストならびに添え字付きオブジェクトと突き合わせてチェックされる。「Ｉｄｅｎｔｉｆｉｅｒ」ラッパーについては、ホワイトリストが同様に調べられる。オブジェクトは、あるタイプ（「Ｄｏｃｕｍｅｎｔ」、「Ｗｉｎｄｏｗ」、ＨＴＭＬ要素など）であると決定され、また適用できるとき、グローバルインスタンスと比較される。これらの比較および検索は、多くの場合、性能への重大な影響もなく効率的に行われ得る。
【００４８】
[0051]一実施形態では、ラッパー呼び出しが、様々な手順のいずれか１つを使用して処理されることが可能であり、非限定的な例として、下記に説明するように、新しいコード（ＪａｖａＳｃｒｉｐｔコード）が特定のＲＥＳＴ  ＡＰＩエンドポイントに送られる場合、動的にロードされたコードを処理し、キャッシュすることを含む。これは、「ａｐｐｅｎｄＣｈｉｌｄ」、「ｉｎｎｅｒＨＴＭＬ」、「ｅｖａｌ」、「ｅｘｅｃＳｃｒｉｐｔ」、および「ｗｒｉｔｅ」のラッパーにおいて起こり得る。ラッパーは、ＵＲＬまたはホスト名のサフィックス付加またはサフィックス非付加を使用して処理され得る。最終的に、誤検出ラッパー呼び出し（false positive wrapper invocation）および通常実行の再開（resume normal execution）もまた検出され得る。
【００４９】
[0052]別の実施形態では、ＵＲＬ関連プロパティまたはメソッドへのＤＯＭアクセスを処理することを担うラッパー関数ハンドラが、論理グループに分割され得る。これらのグループは、たとえば、「ｇｅｔｔｅｒｓ」、「ｓｅｔｔｅｒｓ」、および「ｄｅｔｅｃｔｏｒｓ」を含む。「ｇｅｔｔｅｒｓ」は、「ｇｅｔ」ラッパーを処理する。これらは、処理されるＵＲＬにサフィックスを付加しない。メソッド（ＪａｖａＳｃｒｉｐｔタイプの「関数」）がアクセスされる場合、「デコレータ（ｄｅｃｏｒａｔｏｒ）」が返される（下記参照）。「ｓｅｔｔｅｒｓ」は、代入されたＵＲＬにサフィックスを付加することによって「ｓｅｔ」ラッパーを処理する。「ｄｅｃｏｒａｔｏｒｓ」は、ラップされたメソッドのために一致するデコレータ関数を返す「ｃａｌｌラッパーを処理し、修飾されるメソッドが何であるかに従って、ＵＲＬにサフィックスを付加するまたはサフィックスを付加しない。
【００５０】
[0053]このデコレータは、ＪａｖａＳｃｒｉｐｔ「ｂｉｎｄ」メソッドを使用して正しいオブジェクトにバインドされ得る。「Ｉｄｅｎｔｉｆｉｅｒ」ラッパーの場合、正しいオブジェクトは、グローバルオブジェクト（場合によっては、ウィンドウ）である。「ＭｅｍｂｅｒＥｘｐｒｅｓｓｉｏｎ」ラッパーの場合、これは、添え字を付けられたオブジェクトである。
【００５１】
[0054]以下は、ラップ前後のコードの限定的ではない例である。
【００５２】
【数１】
2017532615.tif 000003
【００５３】
[0055]新しいコードの作成およびそのようなコードの供給を最適化し、加速して、クライアントデバイス１３０上の遅延を最小にするために、開示する実施形態によりキャッシュ機構が提供される。キャッシュ機構は、サフィックスプロキシ１４０で実施され、変換フェーズのオーバヘッドを改善するように構成される。一実施形態では、変換されるコードのすべての要素（たとえば、インラインスクリプト、ファイル、または動的変換要求）が、サーバごとにキャッシュされる。エントリは、元のコードの暗号学的ハッシュによって鍵付きにされる。キャッシュは、プロキシのユーザ全体にわたって共有される。このように、サーバごとの最初のユーザのみが、一般的にロードされるスクリプトのための変換フェーズの影響を体験することになる。一実施形態では、動的スクリプト変換ＲＥＳＴエンドポイントは、クライアント側で計算されたハッシュを受け入れ、それを使用してキャッシュで検索を行うように構成されることも可能である。これは、プロキシのユーザに対するアップロード帯域幅の使用を削減することができる。こうして動的に生成されたスクリプトが、実際にプロキシに送られることは（最初を除いて）ほとんどない。
【００５４】
[0056]開示するキャッシュ機構はさらに、クライアントデバイス１３０のブラウザによって結果がキャッシュされるように、「Ｃａｃｈｅ−Ｃｏｎｔｒｏｌ」および「Ｅｘｐｉｒｅｓ」ＨＴＴＰヘッダとともに返される（ハッシュごとの）動的変換要求に対する応答をキャッシュする。このように、同じクライアントデバイス１３０は、動的に生成される同じスクリプトをサフィックスプロキシ１４０に頻繁に問い合わせることはない。
【００５５】
[0057]いくつかの実施形態によれば、（コードレベルで）見当違いの／誤検出のラッパー起動に対する最適化された高速パスを作成することによって、ランタイム性能のさらなる最適化が達成される。これは、（たとえば、ブラウザのＪＩＴコンパイラを使用して）クライアントデバイス１３０ブラウザによる最適化を可能にするために、ＪａｖａＳｃｒｉｐｔの限定されたサブセットとともに基本的なラッパー関数を書き込むことによって達成される。別の実施形態では、最多キャッシュヒットを有するコードパスのプロファイリングおよび検出を可能にする手動保守インターフェースが提供される。これは、サフィックスプロキシ１４０キャッシュ中の変換されたコードからいくつかのラッパーを取り除くことを可能にする。
【００５６】
[0058]様々な実施形態によれば、セキュリティサンドボックス１４５を使用するサフィックスプロキシ１４０は、クラウドアプリケーション１１５およびクライアントデバイス１３０を保護するためにさらなるセキュリティ対策を実施するように構成される。一実施形態によれば、セキュリティ対策は、ＤＯＭに追加され、それによってクライアントデバイス１３０にレンダリングされることから第三者コンテンツをブロックするようにセキュリティサンドボックス１４５を構成することを含む。第三者コンテンツは、ツールバー、広告、マルウェアなどを含み得る。この実施形態によれば、クライアントデバイス１３０にダウンロードされるいかなるスクリプトコードも、サフィックスプロキシ１４０でサンドボックス１４５によってインターセプトされる。次いで、コードは分析され、スクリプトコードによって呼び出された（およびその後ＤＯＭに追加された）第三者コンテンツは取り除かれる。
【００５７】
[0059]一実施形態では、セキュリティサンドボックス１４５を使用するサフィックスプロキシ１４０は、あらかじめ定義されたブラックリストにおいて指定されたＵＲＬへのアクセスを防止し、それによって第三者コンテンツをブロックするように構成される。第三者コンテンツにアクセスするためのコードまたは任意の試みの分析は、コードがクライアントデバイス１３０にロードされるとき、ランタイムに実行される。コードを分析し、それぞれ新しいコードを生成するための実施形態は、上記で詳細に説明している。
【００５８】
[0060]別の実施形態では、セキュリティサンドボックス１４５を使用するサフィックスプロキシ１４０は、ウェブサイトがＤＯＭのいくつかの機能にアクセスすることを防止するＤＯＭファイアウォールを提供する、および／またはクライアントデバイス１３０上でいくつかの機能を行うように構成される。制限されるアクション／機能は、たとえば、ウェブサイトがプラグインをロードすることまたはブラウザの設定を変更することを防止すること、クライアントデバイス１３０と他のドメインとの間のすべてのクロスドメインアクセスをブロックすること、およびウェブページとウェブサーバとの間のすべての非同期要求をブロックすることを含み得る。一実施形態では、行われるまたは行われようとしている動作のユーザに対して警告が生成される。ユーザは、動作を許可するまたは拒否することができ得る。
【００５９】
[0061]第三者コンテンツにアクセスするためのコードまたは任意の試みの分析は、コードがクライアントデバイス１３０にロードされるとき、ランタイムに行われることに留意されたい。コードを分析し、それにそれぞれ新しいコードを生成するための実施形態は、上記で詳細に説明している。
【００６０】
[0062]さらに別の実施形態では、セキュリティサンドボックス１４５は、ウェブブラウザ上にレンダリングされるウェブページに含まれるフィールドを暗号化するように構成される。これらのフィールドは、たとえば、テキストフィールド、コンボボックスなどを含み得る。この実施形態によれば、セキュリティサンドボックス１４５によって暗号化キーが生成される。鍵は、クライアントデバイス１３０、およびセキュリティサンドボックス１４５にのみ知られているが、クラウドアプリケーション１１５には知られていない。暗号化キーは、ウェブページに注入される新しいコードを介してクライアントデバイス１３０に提供される。上記のように、そのようなコードは、静的ウェブページの分析時におよび／またはインラインスクリプトがセキュリティサンドボックス１４５に送られるときに、セキュリティサンドボックス１４５からブラウザに送られる。
【００６１】
[0063]暗号化キーを使用して、ウェブページに示されるいかなるフィールドも暗号化され得る。データ（フィールドのコンテンツ）の暗号化は、クライアントデバイス１３０で行われ、復号は、セキュリティサンドボックス１４５によって行われる。その上、いかなる暗号化されたデータも、セキュリティサンドボックス１４５によってインターセプトされる。次いで、ＤＯＭへのすべてのテキスト挿入が検出され、暗号化されたデータのテキスト挿入は、（実際のＤＯＭへの挿入の前に）復号されたデータで置き換えられる。この動作の結果、ブラウザによって実行される（クラウドアプリケーション１１５によって提供された）元のコードは、復号されたデータのみにアクセスすることができる。コードが、ＤＯＭから復号されたデータを読み出そうとする場合、セキュリティボックス１４５がこの試みをインターセプトし、データを元通りに暗号化する。
【００６２】
[0064]元のコードはサンドボックス化されるので、コードの実行は、注入されたオブジェクトおよび／またはラッパー関数にアクセスし、暗号化キーを読み出すことができないことに留意されたい。その結果、たとえクラウドコンピューティングプラットフォーム１１０がハッキングされても、ハッカーは、暗号化されたデータにアクセスでき、それを見ることしかできない。ハッカーが、クライアントデバイス１３０からデータを盗むために稼働中のサイトにコードを注入する場合、注入された１つのコードは、サンドボックス１４５によって処理され、したがって、クライアントデバイス１３０にあるいかなるデータにもアクセスすることができない。
【００６３】
[0065]本明細書に開示する実施形態は、図１に示す特定のアーキテクチャに限定されず、他のアーキテクチャが、開示する実施形態の範囲から逸脱することなく、等しく使用され得ることを理解されたい。詳細には、サフィックスプロキシ１４０は、クラウドコンピューティングプラットフォーム１１０、異なるクラウドコンピューティングプラットフォーム、または接続可能なデータセンタにあることがある。さらに、一実施形態では、上述のように動作し、障害の場合に制御を行うスタンバイ機器として１つを有する、またはそれらの間で負荷を共有する、またはそれらの間で機能を分配するように構成された複数のサフィックスプロキシ１４０が存在し得る。さらに、開示する実施形態の範囲から逸脱することなく、サフィックスプロキシ１４０の様々な機能が、管理ネットワークプロキシ１２０によって実施され得る。
【００６４】
[0066]図２は、一実施形態によりネットワークアドレスにサフィックスを付加するための方法を示す例示的および非限定的なフローチャート２００を示す。
【００６５】
[0067]Ｓ２１０において、クラウドアプリケーションからクライアントデバイスに送られたウェブページが受信される。ウェブページは、クライアントデバイスとクラウドアプリケーションとの間のトラフィックのラインでアクセスプロキシまたは任意のデバイスから送られ得る。一実施形態では、ウェブページは、サフィックスプロキシによってインターセプトされる。
【００６６】
[0068]Ｓ２２０において、受信されたウェブページにおいて指定された静的ネットワークアドレスが、サフィックスを付加される。すなわち、あらかじめ定義されたドメイン名サフィックスが、ネットワークアドレスに追加される。サフィックスが付加される１つまたは複数のネットワークアドレスは、あらかじめ定義されたＵＲＬのリストに基づいて決定される。
【００６７】
[0069]Ｓ２２５において、１つのコード（ＪａｖａＳｃｒｉｐｔコード）が、ウェブページに注入され、ウェブページに動的にロードされるスクリプトファイル、コードファイル、またはコンテンツファイルをその後処理する。そのようなファイルの例は、たとえば、ＪａｖａＳｃｒｉｐｔ、ＣＳＳなどを含む。変更されたウェブページは、クライアントデバイスのブラウザに中継される。
【００６８】
[0070]クライアントのブラウザ上にウェブページをレンダリングすることにより、サーバ（たとえば、クラウドアプリケーションを実行しているサーバ）からのコンテンツをウェブページに動的ロードし得る。様々な実施形態によれば、ウェブページがブラウザにダウンロードされるとき、（たとえば、静的インラインスクリプトを介して）そのようなコードをロードしようとするいかなる試みも、たとえばセキュリティサンドボックス１４５が、静的スクリプトコードなど、動的コードの実行を制御することを可能にするために検出される。
【００６９】
[0071]Ｓ２３０において、ウェブページに動的にロードされるいずれかのコードが受信される。たとえば、そのようなコードは、ブラウザからサフィックスプロキシ１４０に送られ得る。一実施形態では、受信されたコードは、今後の使用に備えてキャッシュされる。Ｓ２４０において、受信されたコードは変更される。一実施形態では、Ｓ２４０は、サフィックスプロキシによって行われる。詳細には、コード変更は、今後動的にロードされるコードがランタイム中に変更されるように行われ、あるネットワークアドレスのサフィックス付加を実施するために、ＤＯＭへの特定の変化はインターセプトされ得る。
【００７０】
[0072]いくつかの実施形態では、ネットワークアドレスのサフィクス付加を実施することは、あらかじめ定義されたドメイン名でＤＯＭへのアドレス（ＵＲＬ）の書込みにサフィックスを付加すること、およびＤＯＭからのアドレス（ＵＲＬ）の任意の読取りにサフィックスを付加しないことを含む。
【００７１】
[0073]上記に詳細に述べるように、コード変更は、いくつかのＤＯＭ要素をラップすることを含む。さらなる実施形態では、コードの変更は、上記に詳細に説明する静的フッキング技法を使用して行われる。ステップＳ２４０は、新しいコードが得られることになる（そのような新しいコードの一例が上記に提供される）。一実施形態では、新しいコードは、今後の使用に備えてキャッシュされる。キャッシュ機構の様々な実施形態は、上記に説明されている。
【００７２】
[0074]Ｓ２５０において、新しいコードはクライアントデバイスに、そこで実行するために送られる。Ｓ２３０およびＳ２４０は、ウェブページに含まれるいかなる動的コード、スクリプト、またはファイルにも行われることに留意されたい。ステップＳ２３０およびステップＳ２４０は、完全にランタイム中に行われることは、強調されるべきである。
【００７３】
[0075]図３は、一実施形態によりＤＯＭへの変化を制御するための方法を示す例示的および非限定的なフローチャート３００を示す。
【００７４】
[0076]Ｓ３１０において、クラウドアプリケーションからクライアントデバイスに送られたウェブページが受信される。ウェブページは、クライアントデバイスとクラウドアプリケーションとの間のトラフィックのラインでアクセスプロキシまたは任意のデバイスから送られ得る。一実施形態では、ウェブページは、サフィックスプロキシによってインターセプトされる。
【００７５】
[0077]Ｓ３２０において、１つのコード（たとえば、ＪａｖａＳｃｒｉｐｔコード）が、ウェブページに注入され、ウェブページに動的にロードされるスクリプトファイル、コードファイル、またはコンテンツファイルをその後処理する。一実施形態では、１つのコードは、ウェブページのＤＯＭで暗号化キーを管理する。暗号化キーは、サフィックスプロキシに知られているが、クラウドアプリケーションおよび／またはクラウドプラットフォームのプロバイダには知られていない。
【００７６】
[0078]Ｓ３３０において、変更されたウェブページは、クライアントデバイスに送られる。注入された、暗号化キーを伴ったコードは、クライアントデバイスのユーザがウェブページの任意のテキストフィールドを暗号化することを可能にする。
【００７７】
[0079]Ｓ３４０において、ＤＯＭに挿入された、暗号化されたテキストフィールドがインターセプトされる。暗号化されたテキストの認識は、たとえば、知られている暗号化パターンを捜すことによって行われる。Ｓ３５０において、いずれかの識別された、暗号化されたテキストフィールドが復号される。次いで、Ｓ３６０において、識別された、暗号化されたテキストフィールドの復号されたデータは、ＤＯＭに挿入される。クラウドアプリケーションによって提供されるいかなるコード（たとえば、ＪａｖａＳｃｒｉｐｔコード）も、ＤＯＭからの復号されたデータを読み取ることはできないことに留意されたい。ＤＯＭの外にそのようなデータを読み出そうとするいかなる試みも、たとえばセキュリティサンドボックス１４５によってインターセプトされることにさらに留意されたい。したがって、ＤＯＭへの変化を制御するための開示する方法は、クラウドアプリケーションにセキュリティの別の層を提供する。
【００７８】
[0080]図４は、一実施形態により構築されたサフィックスプロキシ１４０の例示的および非限定的なブロック図を示す。サフィックスプロキシ１４０は、クラウドコンピューティングプラットフォーム、データセンタに、またはスタンドアロンネットワークデバイスとして配置され得る。サフィックスプロキシ１４０は、上記により詳細に説明するアクセスポリシーに基づいてクラウドアプリケーションへのアクセスを少なくとも制御し、実施するように構成される。
【００７９】
[0081]サフィックスプロキシ１４０は、メモリ４１５に結合された処理システム４１０と、セキュリティサンドボックスモジュール４２０とを含む。処理システム４１０は、メモリ４１５に記憶された命令を使用して、サフィックスプロキシ１４０の動作を制御する。
【００８０】
[0082]処理システム４１０は、１つまたは複数のプロセッサで実施される処理システムを含む、またはこれの構成要素であり得る。１つまたは複数のプロセッサは、汎用マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（「ＤＳＰ」）、フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）、プログラマブルロジックデバイス（「ＰＬＤ」）、コントローラ、状態機械、ゲートロジック、ディスクリートハードウェアコンポーネント、専用ハードウェア有限状態機械、または計算もしくは情報の他の操作を行うことができるその他の好適なエンティティのいずれかの組合せで実装され得る。
【００８１】
[0083]処理システム４１０は、ソフトウェアを記憶するための機械可読媒体も含み得る。ソフトウェアは、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、または他のように呼ばれるかどうかにかかわらず、いかなるタイプの命令も意味するように広く解釈されるものとする。命令は、コードを（たとえば、ソースコード形式、バイナリコード形式、実行可能コード形式、またはコードのその他の好適な形式で）含み得る。命令は、１つまたは複数のプロセッサによって実行されるとき、本明細書に記載する様々な機能を処理システム１４０に行わせる。
【００８２】
[0084]セキュリティサンドボックスモジュール４２０は、ＤＯＭへのいかなる変化も監視する、ＤＯＭへのアクセスを防止する、ならびにネットワークアドレスにサフィックを付加するおよびサフィックスを付加しないように構成される。上記に詳細に説明するように、セキュリティサンドボックスモジュール４２０の動作は、ランタイムに、すなわちウェブページがクライアントデバイス１３０のウェブブラウザ上にレンダリングされるとき、行われる。
【００８３】
[0085]ウェブページは、クラウドアプリケーション１１５によって提供される。セキュリティサンドボックスモジュール４２０の動作は、上記に詳細に説明している。一実施形態では、セキュリティサンドボックスモジュール４２０は、上記に詳細に説明する様々な構造形態を有する処理装置として実現され得る。
【００８４】
[0086]本明細書に開示する様々な実施形態は、ハードウェア、ファームウェア、ソフトウェア、またはその任意の組合せとして実装され得る。さらに、ソフトウェアは、パーツから、またはいくつかのデバイスおよび／もしくはデバイスの組合せからなるプログラム記憶ユニットまたは非一時的コンピュータ可読媒体上で実体的に具体化されるアプリケーションプログラムとして実装されることが好ましい。アプリケーションプログラムは、任意の好適なアーキテクチャを含むマシンへアップロードされ、マシンによって実行され得る。好ましくは、マシンは、１つまたは複数の中央演算処理装置（「ＣＰＵ」）、メモリ、および入力／出力インターフェースなどのハードウェアを有するコンピュータプラットフォームに実装される。またコンピュータプラットフォームは、オペレーティングシステムおよびマイクロ命令コードを含み得る。本明細書に記載した様々な処理および機能は、そのようなコンピュータまたはプロセッサが明示的に示されているかどうかにかかわらず、ＣＰＵによって実行され得るマイクロ命令コードの一部、またはアプリケーションプログラムの一部、またはその任意の組み合わせであり得る。その上、増設のデータ記憶装置および印刷装置など、他の様々な周辺装置が、コンピュータプラットフォームに接続され得る。さらに、非一時的コンピュータ可読媒体は、一時的な伝搬信号を除く任意のコンピュータ可読媒体である。
【００８５】
[0087]「第１の」、「第２の」などの呼称を使用する本明細書中の要素への言及はいずれも、一般的に、それらの要素の数または順序を限定しないことを理解されたい。むしろ、これらの指定は一般的に本明細書では、２つ以上の要素または要素のインスタンスの間で区別する便利な方法として使用される。したがって、第１および第２の要素への言及は、２つの要素のみがそこで使用され得ること、または第１の要素が何らかの方法で第２の要素に先行しなければならないことを意味しない。また、別段の記述がない限り、要素のセットは、１つまたは複数の要素を含む。その上、説明または請求項において使用される「Ａ、Ｂ、またはＣの少なくとも１つ」、あるいは「Ａ、Ｂ、またはＣの１つまたは複数」、あるいは「Ａ、Ｂ、およびＣからなる群の少なくとも１つ」、あるいは「Ａ、Ｂ、およびＣの少なくとも１つ」という形の用語は、「ＡまたはＢまたはＣまたはこれらの要素の任意の組合せ」を意味する。たとえば、この用語は、Ａ、またはＢ、またはＣ、またはＡおよびＢ、またはＡおよびＣ、またはＡおよびＢおよびＣ、または２Ａ、または２Ｂ、または２Ｃなどを含み得る。
【００８６】
[0088]本明細書に列挙したあらゆる例および条件付き用語は、開示する実施形態の原理および発明者によって当技術を促進することに寄与される概念を理解する際に読者の助けとなるように、教育の目的を意図されたものであり、そのような具体的に列挙した例および条件に制限することはないと解釈されたい。さらに、原理、態様、および実施形態、ならびにその特定の例を列挙する本明細書中のあらゆる記載は、その構造的均等物および機能的均等物の両方を含むものとする。さらに、そのような均等物は、現在知られている均等物ならびに将来開発される均等物、すなわち、構造にかかわらず同じ機能を行うように開発されるいかなる要素をも含むものとする。
【図１】
2017532615.tif 000004
【図２】
2017532615.tif 000005
【図３】
2017532615.tif 000006
【図４】
2017532615.tif 000007
【国際調査報告】
2017532615.tif 000008