(57)【要約】  JavaScriptソースコードの保護を提供するためのシステム、関連方法及び他の手段を本願明細書において提供する。回路は、デバッグコンソールがクライアント装置で有効か否かを判断し、前記デバッグコンソールが有効であるとJavaScriptに対するアクセスを拒否するように構成することができる。加えて又は代わりに、回路は、クライアント装置からJavaScriptソースコードにアクセスするリクエストを受信することができ、リクエストが信頼されたリファラからであるか否かを判断することができる。リクエストが信頼できないリファラからである場合、回路は、JavaScriptに対するアクセスを拒否することができる。リクエストが信頼されたリファラからである場合、回路は、JavaScriptに対するアクセスを許可することができる。【選択図】図3B
2014534498.tif 000002
【特許請求の範囲】
【請求項１】
JavaScriptを保護する方法であって、
ネットワークプロセッサーによって、デバッグコンソールがクライアント装置で有効か否かを判断するステップと、
前記デバッグコンソールが前記クライアント装置で無効であるという判断に応じて、前記JavaScriptに対するアクセスを許可するか否かを更に評価するステップと、
前記クライアント装置から前記JavaScriptにアクセスするためのリクエストを受信するステップと、
前記クライアント装置が少なくとも一つの信頼されたリファラと関連しているか否かを判断するステップと、
前記リクエストが前記信頼されたリファラを経ての受信であるという判断に応じて、前記JavaScriptに対するアクセスを提供するステップと、を含む方法。
【請求項２】
前記デバッグコンソールが前記クライアント装置で有効か否かを判断するステップは、前記クライアント装置をポーリングするステップを含む、請求項1に記載の方法。
【請求項３】
前記クライアント装置をポーリングするステップは、断続的に実行される、請求項2に記載の方法。
【請求項４】
前記デバッグコンソールが前記クライアント装置で有効であるという判断に応じて、前記JavaScriptに対するアクセスをその後拒否するステップを更に含む、請求項1に記載の方法。
【請求項５】
前記JavaScriptに対するアクセスを拒否するステップは、前記JavaScriptのソースコードの代わりに前記クライアント装置にエラーメッセージを送信するステップを含む、請求項4に記載の方法。
【請求項６】
前記JavaScriptにアクセスする第二リクエストを受信するステップと、
前記第二リクエストが信頼できないリファラを経て受信されると、前記第二リクエストに応じて前記JavaScriptのソースコードに対するアクセスを拒否するステップと、を更に含む、請求項1に記載の方法。
【請求項７】
前記クライアント装置が前記信頼されたリファラと関連しているか否かを判断するステップは、1又は複数のデータベースにおける1又は複数の信頼されたリファラのリストにアクセスするステップを更に含む、請求項1に記載の方法。
【請求項８】
リファラフィールドからの抽出データ及び前記リクエストをパースするステップと、
前記リファラフィールドの前記データと1又は複数の信頼されたリファラのリストとを比較して、前記信頼されたリファラを経て受信された前記リクエストが含まれているか否かを判断するステップと、を含む、請求項7に記載の方法。
【請求項９】
デバッグ装置が検出されると、前記JavaScriptによって提供されるサービスに対してアクセスを拒否するデバッグコンソールステータスを保存するステップを更に含む、請求項1に記載の方法。
【請求項１０】
前記JavaScriptは、ネットワークプロセッサーから分離したサーバーによって提供される、請求項1に記載の方法。
【請求項１１】
コンピュータープログラム製品であって、
前記製品は、非一時的コンピューター可読性記憶媒体及びそれに保存されたコンピュータープログラム命令を備え、
前記コンピュータープログラム命令は、請求項1〜10のいずれかに記載の方法を実行するように構成されたプログラム命令を含む、製品。
【請求項１２】
JavaScriptを保護するためのシステムであって、
ネットワークプロセッサーによって、デバッグコンソールがクライアント装置で有効か否かを判断し、
前記デバッグコンソールが前記クライアント装置で無効であるという判断に応じて、前記JavaScriptに対するアクセスを許可するか否かを更に評価し、
前記クライアント装置から前記JavaScriptにアクセスするためのリクエストを受信し、
前記クライアント装置が少なくとも一つの信頼されたリファラと関連しているか否かを判断し、そして、
前記リクエストが前記信頼されたリファラを経ての受信であるという判断に応じて、前記JavaScriptに対するアクセスを提供する、ように構成された回路を備えるシステム。
【請求項１３】
前記回路は、前記デバッグコンソールが前記クライアント装置で有効か否かを決定し、前記クライアント装置をポーリングするように更に構成される、請求項12に記載のシステム。
【請求項１４】
前記回路は、前記クライアント装置を断続的にポーリングするように更に構成される、請求項13に記載のシステム。
【請求項１５】
前記回路は、前記デバッグコンソールが前記クライアント装置で有効であるという判断に応じて、前記JavaScriptに対するアクセスをその後拒否するように構成される、請求項12に記載のシステム。
【請求項１６】
前記JavaScriptに対するアクセスを拒否することは、前記JavaScriptのソースコードの代わりに前記クライアント装置にエラーメッセージを送信することを含む、請求項15に記載のシステム。
【請求項１７】
前記回路は、
前記JavaScriptにアクセスする第二リクエストを受信し、そして、
前記第二リクエストが信頼できないリファラを経て受信されると、前記第二リクエストに応答して前記JavaScriptのソースコードに対するアクセスを拒否する、ように更に構成される、請求項12に記載のシステム。
【請求項１８】
前記クライアント装置が前記信頼されたリファラと関連しているか否かを判断することは、1又は複数のデータベースにおける1又は複数の信頼されたリファラのリストにアクセスすることを更に含む、請求項12に記載のシステム。
【請求項１９】
前記回路は、
リファラフィールドからの抽出データ及び前記リクエストをパースし、そして、
前記リファラフィールドにおける前記データと1又は複数の信頼されたリファラのリストとを比較して、前記信頼されたリファラを経て受信された前記リクエストが含まれるか否かを判断する、ように更に構成される、請求項12に記載のシステム。
【請求項２０】
前記回路は、デバッグ装置が検出されると、前記JavaScriptによって提供されるサービスに対するアクセスを拒否するデバッグコンソールステータスを保存するように更に構成される、請求項12に記載のシステム。
【請求項２１】
前記回路から分離している前記クライアント装置に前記JavaScriptを提供するように構成されたサーバーを更に備える、請求項12に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願についてのクロスリファレンス
本願は、2011年9月30日付け出願の米国仮特許出願第61/541,481号の利益及び優先権を主張する。
【０００２】
分野
本発明の実施形態は、一般に、ウェブサイトのJavaScript(例えば、ソースコード)を保護することに関する。
【背景技術】
【０００３】
背景
クライアント側で主にパースされ、ほとんどのウェブブラウザ内にインプリメントされている、スクリプト言語であるJavaScriptは、ウェブサイト又はウェブサービスのクライアント用動的スクリプト言語である。様々なフォーマッティングオプションを有する安定的で、アクセス性を有し、高い汎用性を有するスクリプト言語として広く認められているJavaScriptは、ゲーム及びソーシャルネットワーキングからエンタープライズソリューションにわたるインタラクティブなウェブアプリケーションにおいて利用されている。JavaScriptを保護するための領域が特定されてきている。努力、独創及び革新を通じて、かかるシステムを向上させるソリューションは、本発明の実施形態を通じて実現及び説明される。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
大まかに言えば、JavaScript、ソースコード及び/又は他の情報であってネットワークを経て遠隔でアクセスできるものの安全性を向上させる、システム、方法、非一時的記憶媒体に保存されるコンピューター可読性プログラムコード及び他の手段を提供する。より詳しくは、本願明細書により提供される実施形態は、JavaScript(例えば、JavaScriptソースコード、ソースコードの一部及び/又はJavaScriptによって提供されるサービス)を保護することであってもよい。上記方法は、(例えば、1又は複数のネットワークプロセッサーによって)デバッグコンソールがクライアント装置で有効か否かを判断するステップと、デバッグコンソールがクライアント装置で有効である場合、JavaScriptに対するアクセスを拒否するステップと、クライアント装置からJavaScriptにアクセスするためのリクエストを受信するステップと、リクエストが信頼されたリファラを経て受信するか否かを判断するステップと、リクエストが信頼されたリファラから受信されたものではない場合、JavaScriptに対するアクセスを拒否するステップと、を含むことができる。
【０００５】
ある実施形態において、デバッグコンソールがクライアント装置で有効か否かを判断するステップは、クライアント装置をポーリングするステップを含むことができる。クライアント装置をポーリングするステップは、断続的に及び/又は規定のポーリング間隔で実行することができる。
【０００６】
ある実施形態において、JavaScriptにアクセスするためのリクエストは、ネットワークプロトコル(例えば、ハイパーテキストトランスファープロトコル(HTTP)、ハイパーテキストトランスファープロトコルセキュア(HTTPS)、SPDY、トランスミッションコントロールプロトコル及び/又はインターネットプロトコル(TCP/IP)等)を経て受信することができる。上記リクエストは、リファラフィールド(例えば、HTTPの「リファラ」フィールド)を含むことができる。リクエストが信頼されたリファラからのものであるか否かを判断するステップは、1又は複数の信頼されたリファラのリストを用いてリファラフィールドのデータを比較するステップを含むことができる。このように、上記方法は、1又は複数のデータベースにおける1又は複数の信頼されたリファラのリストにアクセスするステップを更に含むことができる。
【０００７】
ある実施形態において、JavaScriptに対するアクセスを拒否するステップは、クライアント装置にエラーメッセージを送るステップを含むことができる。或いは及び/又は加えて、JavaScriptに対するアクセスを拒否するステップは、JavaScript及び/又はJavaScriptのソースコードによって提供されるサービスに対するアクセスを拒否するステップを含むことができる。
【０００８】
ある実施形態において、上記方法は、デバッグ装置が検出されると、JavaScriptによって提供されるサービスに対するアクセスを拒否するデバッグコンソールステータスを保存するステップを更に含むことができる。
【０００９】
ある実施形態において、JavaScriptは、JavaScriptを安全にするネットワークプロセッサーから分離したサーバーによって提供することができる。
【００１０】
ある実施形態は、本願明細書に記載の方法及び/又は他の機能をインプリメントするように構成された装置及び/又はシステムを含むことができる。言い換えると、上記装置は、メモリー及び/又は他の非一時的コンピューター可読性媒体に保存された命令及び/又は他のデータに基づいて、本願明細書に記載の機能をインプリメントするように構成された1又は複数のプロセッサー及び/又は他のマシン部品を含むことができる。
【００１１】
以下で、これらの特性と本発明の更なる特徴、機能及び詳細について説明する。同様に、対応する及び更なる実施形態も後述する。
【００１２】
従って、本発明の実施形態を大まかに説明するために、添付の図面を以下で参照するが、必ずしも一定の比率で描画されているわけではない。
【図面の簡単な説明】
【００１３】
【図１】図1は、ある実施形態に従って構成されたシステムの模式的なブロック図である。
【００１４】
【図２】図2は、ある実施形態に従って構成された装置の模式的なブロック図である。
【００１５】
【図３Ａ】図3Aは、ある実施形態に従って実行される例示的方法のフローチャートを示す。
【図３Ｂ】図3Bは、ある実施形態に従って実行される例示的方法のフローチャートを示す。
【００１６】
【図４】図4は、ある実施形態による、例示的なソースを表示する画面を示す。
【００１７】
【図５】図5は、ある実施形態による、例示的なエラーページを示す。
【発明を実施するための形態】
【００１８】
本発明の実施形態は、添付の図面を参照しつつ以下でより充分に説明するが、本発明の全ての実施形態を示しているわけではなく、いくつかの実施形態を示している。実際、本発明の実施形態は、多種多様な形態で具体化することができ、本願明細書に記載の実施形態に限定するように解釈すべきではなく、むしろ、これらの実施形態は、この開示が適用される法的要求を満たすように提供している。同じ番号は、全体にわたって同じ要素を表す。
【００１９】
本願明細書で使用している、用語「データ」、「コンテンツ」及び「情報」並びに同様の用語は、様々な例示的実施形態に従ってキャプチャー、送信、受信、表示及び/又は保存することができるデータを指すものとして置換可能に用いることができる。従って、かかる任意の用語の使用は、開示の精神と範囲を制限すべきではない。更に、本願明細書において、コンピューティング装置が他のコンピューティング装置からデータを受信すると記載されている場合、上記データは、他のコンピューティング装置から直接受信したり、1又は複数の仲介コンピューティング装置(例えば1又は複数のサーバー、リレー、ルーター、ネットワークアクセスポイント、基地局及び/又は同様のもの)を経て間接的に受信したりしてもよいことはいうまでもない。同様に、本願明細書において、コンピューティング装置が上記データを他のコンピューティング装置に送信すると記載されている場合、上記データは、他のコンピューターに直接送信したり、1又は複数の仲介コンピューティング装置(例えば1又は複数のサーバー、リレー、ルーター、ネットワークアクセスポイント、基地局及び/又は同様のもの)を経て間接的に送信したりしてもよいことはいうまでもない。
【００２０】
本願明細書に記載の実施形態は、ウェブサイトプロバイダー(例えば、商人又は他のオンラインサービスプロバイダー)が、他のタイプのコード及び/又は現在公開されている利用可能な情報の中で、第三者(競争者、ハッカー、リバースエンジニアリングする者、及び/又は任意の他の認可されていない者及び/又はマシンを含む)による閲覧から、そのJavaScriptを保護することを可能にするように構成することができる。
【００２１】
ビジュアルインターネットの導入直後、SGML(汎用マークアップ言語規約)の制限を拡張する簡単なクライアント側スクリプト言語の必要性を認識したブラウザ開発グループは、HTML(ハイパーテキストマークアップ言語)を作り上げた。これによって、プログラム可能なオブジェクトとしてウェブページ内の要素を規定する一組の規格であるドキュメントオブジェクトモデル(DOM)に直接アクセスすることができるスクリプト言語(JavaScriptを含む)が発展した。
【００２２】
ウェブ技術の成長を促進するために、インターネットの最も初期の設計者らは、ダウンロードされ且つ依存する全てのスクリプトであってクライアントマシンのユーザーが閲覧できるスクリプトについて、ソースコードの表示及び共有をクライアント側に許可していた。その結果、JavaScriptに挿入可能な所有権がある任意のアルゴリズムの使用は、初期設定でパブリックドメインに置かれていた。この点に関して、ある実施形態では、例えば、所有権があるJavaScriptをJavaラッパー内に隠す知的財産保護技術を提供する。
【００２３】
JavaScriptがプログラマーにDOMを操作及び拡張する能力を与え、これがインターネット標準として規定されているため、プロトタイプオブジェクト指向スクリプト言語としてのJavaScriptの機能は、HTML文書の横断化、イベント処理、動画化及び非同期インタラクションを簡単にするプログラムフレームワーク(例えばPrototype及びjQuery)の開発業者にチャンスを与えてきた。しかしながら、JavaScriptに関する全ての迅速な開発優位性と同調して、クライアントのウェブブラウザにデータをダウンロードしキャッシュするプロトコールに対する知的財産権保護の課題が生じている。
【００２４】
現在、JavaScriptに対する知的財産権保護手段(例えば、JavaScriptに対する公衆のアクセスを防止するもの)は、ハッカーを妨害又は阻止することだけを目的とする難読化手段と、主にコード最適化ツールとして設計された縮小プログラムに限られ、結果として生じる第２次効果が知的財産権保護の対象となっている。これらのマシンインプリメント方法は、カジュアルハッカー又は他の許可されていないユーザーを思いとどまらせることには充分な一方で、デバッグプロセスに問題があることを証明し得るものであり、有益なコードをリバースエンジニアリングする時間的投資に対して潜在的に大きな金銭的利益があることによって動機づけらる、最低限の技術と覚悟のあるハッカーに対しては効果的な防御手段とはなりえない。
【００２５】
JavaScriptに関する強い知的財産権保護方法が存在しない状況下にあるプログラマーは、基本的且つ限定的なライセンスを持つ状態にするために、ソースであるJavaScriptコードを開示せざるお得ない。オープンソースライブラリーがインターネット全体の発達のために重要であった一方で、プログラミングコミュニティー内で進化してきたオープン文化は、会社での知的財産権の保護及び活用に主に基づく価値構築プロセスに反するものである。1982年から2002年までに、無形資産(商標、商品名及び他のタイプの知的財産権を含む)は、会社の価値の40%から総評価額の最大75%を占めるまでに成長したと報告されている。このように効率がよいにもかかわらず、JavaScriptは、法律によって保護される専有財産権である知的財産権のコンセプトを取り除いているため、創造的な価値の金銭化に関連する潜在的な利益をJavaScript開発者に事実上与えないようにしている。
【００２６】
JavaScript及び他の無形知的財産権の保護を進展させる努力を妨げている障壁には、帯域幅及びコンピューターオーバーヘッド制限、並びに、クライアントにデータ送信を安全に行える機能的コンテンツ送信ネットワークアーキテクチャーを効率的に配置する能力の欠如が含まれる。
【００２７】
本願明細書において述べられる(例えば、「Hide JS」と時には称する)ある実施形態は、とりわけ、Javaラッパー内にある所有権を有するJavaScriptを隠すマシンインプリメント法を使用して簡単且つ安定して知的財産権を保護することができる。ある実施形態は、比較的小さなネットワークアーキテクチャーを変化させて、目標サーバー上にHide JSのインスタンスを生成することによって殆どのネットワーク技術者がインプリメントすることができる。
【００２８】
図1は、本発明の例示的な実施形態から利益を得ることができるシステム100を図示する(本願明細書において使用する「例」、「例示」等の用語は、「例、実例又は説明としての役割を果たすもの」を指す)。システム100には、1又は複数のクライアント102、1又は複数のサーバー104及び1又は複数のデータベース108を含ませてもよい。ある実施形態において、クライアント102及び/又はサーバー106は、1又は複数の携帯式又は据置式電子デバイス(例えば、1又は複数の携帯式メディアプレーヤー、スマートフォン、携帯情報端末(PDA)、タブレットコンピューター、ラップトップコンピューター、デスクトップコンピューター又はサーバーコンピューター等)を備えていたり、それらを含んでいたり、それらに具体化されていてもよい。クライアント102は、とりわけ、人がウェブサイトにアクセス及び/又はそれを構築するのに使用する消費者向け装置として主に機能するように構成することができる。サーバー106は、クライアント装置(例えばクライアント102)にウェブサイト及び/又は他の情報を提供するマシンとして主に機能するように構成することができる。
【００２９】
クライアント102及びサーバー106は、多種多様な様式の1つ(例えば、多くの有線又は無線通信又はネットワーク技術の1つ)において間接的及び/又は直接に互いと通信するように構成することができる。かかる技術の例には、特に限定するものではないが、ユニバーサルシリアルバス(USB)、無線周波(RF)、ブルートゥース(BT)、赤外線(IrDA)、多種多様なセルラー(無線)式通信技術の1つ(例えば、多くの2G、2.5G、3G又は4G通信技術のうちの1つ)、ローカルエリアネットワーク(LAN)、ワイヤレスLAN(WLAN)技術等が含まれる。ある実施形態において、クライアント102及びサーバー106は、1又は複数のネットワーク104を通じて通信するように接続及び構成することができる。ネットワーク104は、データ及び/又は音声ネットワークを含む1又は複数の種々のタイプのネットワークに関する多種多様な組合せの1つを含むことができる。例えば、ネットワーク104は、1又は複数のデータネットワーク(例えばLAN、メトロポリタンエリアネットワーク(MAN)及び/又は広域ネットワーク(WAN)(例：インターネット))を含むことができ、1又は複数の音声ネットワーク(例えば一般加入電話網(PSTN))を含むことができる。図1を不必要に複雑にすることを避けるために示していないが、ネットワーク104は、クライアントとサーバー間のデータ又は情報等を伝達するための1又は複数の装置(例えば1又は複数のルーター又はスイッチ等)を含むことができる。
【００３０】
1又は複数のデータベース108は、1又は複数のサーバー106と通信するように構成することができる。その意味において、1又は複数のサーバー106は、データベース108の作成、維持管理及び使用を制御するデータベース管理システムを含むことができる。後で更に詳細に説明する通り、ウェブページコンテンツ及び/又はデータであってJavaScriptを保護することに関するものは、データベース108に保存し、本願明細書に記載の技術に従ってアクセスすることができる。
【００３１】
以下で図2を参照する。図２は、クライアント102及び/又はサーバー106の1又は複数の機能を作動又は実行するように構成可能な、一例である装置200のブロック図を図示する。別々の装置として図1には示されているが、ある実施形態において、装置200は論理的に隔てられているが装置200内に共に配置されているクライアント及びサーバーをサポートすることができる。装置200は、様々な手段を提供するように構成することができ、例えば、本願明細書に記載の1又は複数の機能(例えば、図3A及び3Bに示される方法300及び330)を実行するように構成することができる。しかしながら、装置200は単なる例であり、その他の構造物を使用して1又は複数の類似の機能を実行することもできることは言うまでもない。
【００３２】
図2に示すように、装置200は、メモリー204に接続しているプロセッサー202を含むことができる。メモリー204は、揮発性及び/又は不揮発性メモリーを含むことができ、一般的にはコンテンツ又はデータ等が保存される。この点に関しては、メモリーは、本願明細書に記載の1又は複数の機能をプロセッサー202によって実行することができる、1又は複数のアプリケーション206、モジュール、命令又はコンピューター可読性プログラムコード部等を保存することができる。かかるアプリケーションの1つの例は、JavaScriptアプリケーションを保護するものであり、限定するものではないが、本明細書においては「Hide JS」と称する。他のアプリケーションの例には、1又は複数のウェブブラウザ、生産性アプリケーション、ゲームアプリケーション又はユーティリティー等が含まれる。
【００３３】
メモリー204は、装置200から送信される、及び/又は、装置200によって受信されるコンテンツを保存するように構成することもできる。本願明細書に記載の通り、複数のアプリケーションは、それぞれ、複数の装置200によって作動する複数のモジュールを含むことができる。本願明細書で示すように、「モジュール」は、ソフトウェア、ファームウェア、ハードウェア又は任意のそれらの組み合わせによってインプリメントすることができる。
【００３４】
ある実施形態において、プロセッサー202は、データ又はコンテンツ等を表示、送信及び/又は受信するための少なくとも一つのインターフェース又は他の手段に(例えばUSB、RF、BT、IrDA、WLAN、LAN、MAN、WAN(例：インターネット)又はPSTN技術等に従って)接続することもできる。この点に関して、インターフェースは、データ又はコンテンツ等を送信及び/又は受信するための少なくとも一つの通信インターフェース208又は他の手段を含むことができる。通信インターフェース208に加えて、インターフェースは、少なくとも一つのユーザーインターフェース(1又は複数のイヤホン及び/又はスピーカーを含むことが可能)、画面210(ユーザーに視覚情報を示すように構成された任意の適切な表示画面を含むことが可能)及び/又はユーザー入力インターフェース212を含むこともできる。ユーザー入力インターフェース212は、ユーザーからのデータを装置200が受信できるようにする多くの装置(例えばマイクロホン、キーパッド、タッチセンサー式表面(ディスプレイ組込式又は独立式)、ジョイスティック、マウス又は他の入力装置)の1又は複数を含むことができる。
【００３５】
上記のように、装置200は、ある実施形態による装置の操作と関連するステップを実行するプロセッサー202による実行のためのアプリケーション(例えば、アプリケーション206)を含むことができる。かかるアプリケーションの1つの例、すなわち、Hide JSは、JavaScriptを保護するものである。
【００３６】
ある実施形態によれば、クライアント102及び/又はサーバー106の全て又は一部は、コンピュータープログラムの制御下で一般的には作動する。例示的な実施形態の方法を実行するためのコンピュータープログラムは、コンピューター可読性記憶媒体(例えば、不揮発性記憶媒体)に具体化されるか、そうでなければ保存される1又は複数のコンピューター可読性プログラムコード部(例えば一連のコンピュータ命令)を含むことができる。
【００３７】
例えば、図3A及び3Bは、それぞれ、ある実施形態に従って実行される、Javascriptを保護するための方法300及び330のフローチャートを示す。図3A及び3Bによって示されるフローチャートの各ブロック又はステップ、及び/又は、フローチャートのブロックの組合せは、様々な手段(例えば、ハードウェア、ファームウェア及び/又はソフトウェアであって1又は複数のコンピュータープログラム命令を含むもの)によってインプリメントすることができる機能を表している。当然のことながら、任意のかかるコンピュータープログラム命令は、コンピューター又は他のプログラム可能な装置にロードすることができ、その結果、コンピューター又は他のプログラム可能な装置(例えば、ハードウェア)で実行された命令が、フローチャートのブロック又はステップで特定される機能をインプリメントするための手段を作成し、それによってマシンがもたらされる。これらのコンピュータープログラム命令は、コンピューター可読性メモリー(例えば、メモリー204)に保存することもでき、これによってコンピューター又は他のプログラム可能な装置に特定の様式で機能するように指示することができる。その結果、かかるそのコンピューター可読性メモリーに保存された命令によって、フローチャートのブロック又はステップにおいて特定される機能をインプリメントする命令手段を含む製品がもたらされる。コンピュータープログラム命令は、コンピューター又は他のプログラム可能な装置にロードされ、コンピューター又は他のプログラム可能な装置で実行される一連の操作ステップを引き起し、コンピューターインプリメントプロセスをもたらすこともできる。コンピューター又は他のプログラム可能な装置で実行される命令は、フローチャートのブロック又はステップにおいて特定される機能をインプリメントするためのステップを提供する。
【００３８】
従って、フローチャートのブロック又はステップは、特定の機能を実行するための手段の組合せ、特定の機能を実行するためのステップの組合せ及び特定の機能を実行するためのプログラム命令手段をサポートする。当然のことながら、フローチャートの1又は複数のブロック又はステップ及びフローチャートにおけるブロック又はステップの組合せは、特定の機能若しくはステップ又は特殊用途のハードウェア及びコンピューター命令の組合せを実行する特殊用途のハードウェアに基づくコンピュータシステムによってインプリメントすることもできる。
【００３９】
図3Aの方法300は、1又は複数のクライアント装置(例えば、クライアント102)によって実行されるクライアント末端操作であってもよい。302において、クライアント装置は、情報プロトコールを経て実質的にウェブサイト及び/又は他のネットワーク目的地に到着することができる。例えば、クライアント102は、クライアント装置がウェブサイトに保存されている情報にアクセスすることができるウェブブラウザを実行することができる。本願明細書で称する、ウェブサイトに到着することには、クライアント装置に提供されるウェブサイトをクライアント装置がリクエストすることが含まれる。
【００４０】
304において、クライアント装置は、デバッグコンソールについてポーリングされる。デバッグコンソール及び/又は他のタイプのデバッグモジュールによって、クライアントは、関連するヘッダー評価を回避して(後でより詳細に説明する)、全てのドキュメント(例えば、JavaScriptファイル、HTMLファイル、メディアファイル)を受信することができるだろう。例えば、クライアントが、情報転送プロトコールを経て、Hide JSを使用するサーバーによってホストされるオンラインサービスに到達する場合、サーバーは、デバッグコンソールについてクライアントマシンをポーリングし、サービスアーキテクチャー内で揮発的又は持続的に存在するセッションデータのステータスをキャシュすることができる。
【００４１】
デバッグコンソールの有効状態が発見されたという判断に応じて、クライアントを306にリダイレクトして、サービスを308において不許可としてもよい。例えば、サービスが承認されないと、クライアントは、Hide JSプライバシー保護方法の態様を回避することができないとしてもよいし、例えば、図5に関連して更に述べている表示をクライアント装置のユーザーに示すことができる。
【００４２】
デバッグコンソールが検出されなかったという判断に応じて、方法300は、310へと進むことができ、クライアント装置はサービスへ進むことが可能になるだろう。例えば、クライアントは、クライアント装置上で実行中のウェブブラウザによって示されるウェブページ上で「右クリック」する(例えば、マウスの右ボタンを選択する)ことによって提供されるブラウザオプションのメニューからソースオプションの表示を選択することができる。
【００４３】
314において、クライアント装置は、様々な値のJavaScriptの提供が可能になり、そのユーザーがそのJavaScriptを閲覧して他のJavaScriptをロードすることが可能になる。例えば、ノミナル(nominal)値のJavaScriptを、クライアント装置102に提供してもよい。
【００４４】
ある実施形態において、断続的及び/又は時限的ポーリングは、セッションの全体にわたって実行することができ、最初のポーリングの後のデバッグコンソールの有効化を阻止してもよい。例えば、314において、クライアント装置にJavaScriptへのアクセスを承認しそれを提供した後に、タイマーを作動させることも可能である。所定の期間が過ぎ、316においてJavaScript及び/又は他の表示にアクセスする第二リクエストを受信し(例えば、クライアントがJavaScriptの提供をまだ受けており)、そして、318においてクライアントが、保護されたJavaScriptに対するアクセスを(例えば、ウェブブラウザのロケーションバーへのコピー＆ペーストによって)試みようとした後に、方法300は、評価用サーバーにスクリプトリクエストを送る320へ進むことができ、該当する場合には、サーバーは308においてサービスに対するアクセスを拒否することができる。
【００４５】
図4は、ウェブページ410に進んだ後にユーザーがソース表示オプションを選択したことに応答してクライアント上に示すことができるウェブページ410のソース表示画面400(例えば、HTMLドキュメントとしてエンコードされたウェブページ)の例を示す。ソース表示画面400は、ウェブページ410のハイパーテキストを含むことができる。更に、保護されたJavaScriptをクライアントのウェブブラウザに(例えば、レイジーローディング(lazy loading)について、及び/又は、「get」関数を通じて)リクエストするように指示するノミナル値のJavaScriptは、URL 402に示すように、テキスト形式で表示させることができる。
【００４６】
保護されたJavaScriptをリクエストするために、ユーザーは、クライアント(例えば、ウェブブラウザ)のロケーションバーにURL 402を入力することができる。しかしながら、他の技術を用いて、保護されたJavaScriptをリクエストすることもできる(例えば、コピー&ペースト、スクリプト、ブラウザ拡張等)ことは言うまでもない。加えて及び/又は代わりに、保護されたJavaScriptのリクエストは、例えば、ロケーションバー412にURL 404を入力することによってユーザーがウェブページ410にアクセスする場合に行われ得る。
【００４７】
ある実施形態において、種々のスクリプトは、種々のセキュリティレベルで処置することができる。例えば、低レベルセキュリティスクリプトは314において表示させることができるが、高レベルセキュリティスクリプトは320及び308で遮断させることができる。
【００４８】
図3Bの方法330は、1又は複数のサーバー(例えば、サーバー106)によって実行可能なバックエンド機能の例である。332において、1又は複数のサーバー(例えば、サーバー106)は、情報転送プロトコールを経て、クライアント装置が(サーバーによりインターネットに公開させることができる)サイトに到着したことを判断するように構成することができる。例えば、クライアント装置(例えば、クライアント102)は、(例えば、クライアント装置のユーザーが、URLリンクの選択、ウェブブラウザの起動又は任意の他の技術によって、適切なユニフォームリソースロケーター(URL)をウェブブラウザのアドレスバーに入力する場合に)302において、サーバーが受信するデータ用のウェブサイトにリクエストを送信することができる。ウェブサイトには、情報転送プロトコールを経てサーバーによってホストされるサービスが含まれる。
【００４９】
ハイパーテキストトランスファープロトコル(HTTPは、RFC 2616においてドキュメント化されている通り、インターネット技術特別調査委員会(IETF)によって設定された規格であり、クライアントとサーバーとの間の通信を可能にする情報転送プロトコールの例である。HTTPに準拠するために、(例えば、クライアントとサーバーとの間の)全ての処理は、クライアントとサーバーの双方によってパースされる見えないフィールドの形式でリクエスト/応答ヘッダー情報の所定のセットを送受信しなければならない。ヘッダー情報を用いることによって、サーバーは、サーバーからの、リクエストコンテンツの最終的なデリバリーの管理を補助し得る、特定のルールをクライアントに送信することができる。
【００５０】
334において、1又は複数のサーバーは、デバッグコンソールステータスについて、クライアントをポーリングするか、そうでなければクライアントからデータを受信することができる。上述した通り、デバッグコンソール又は他のデバッグモジュールによって、クライアント装置は、少なくともいくつかの関連ヘッダー評価(以下で更に詳しく述べる)を回避する、及び/又は、サーバーからの少なくともいくつかの情報(例えば、JavaScriptファイル、HTMLファイル、メディアファイル等)を受信することができるだろう。ある実施形態において、JavaScriptに埋め込まれたスクリプトは、クライアントに最初に送信することができる。上記スクリプトは、ウェブサイトの残りのコンテンツ(例えば、保護されたJavascript)をロードする前に、有効なデバッグ装置及び/又はモジュールについてブラウザをポーリングすることができる。例えば、XMLHttpRequestを用いることによって、上記スクリプトは、ステータスをサーバーに戻すことができる。
【００５１】
336において、1又は複数のサーバーは、1又は複数のデータベース(例えばデータベース108)にデバッグコンソールステータス(例えば、クライアントは、デバッグコンソールが有効か否か)を保存するように構成することができる。これは、ウェブサイトのコンテンツが保存されているデータベースと同じであってもよい、及び/又は、異なっていてもよい。別の例として、上記ステータスは、サービスアーキテクチャー内で揮発的及び/又は持続的に存在するサーバー側セッションデータとして、キャッシュに保存することができる。このように、上記ステータスは、デバッグ装置が検出されるとクライアントによる更なるウェブサイトアクセス(例えば、ウェブサイトと関連したJavaScript及び/又は任意の他のデータによって提供されるサービスに対するアクセス)を拒否する認証情報の役割を果たすことができる。
【００５２】
338において有効なデバッグコンソールが検出されたという判断の後に、サーバーは、340においてクライアント装置にアクセスすることを拒否するように構成することができる。例えば、336においてクライアントに送信されるJavaScriptは、340において、(例えば、より詳細に後述するように追加のスクリプトをレイジーローディングすることを経て)その後の全てのJavaScriptの初期化を無効にするように構成することができる。加えて及び/又は代わりに、クライアントを(例えば、種々のウェブサイトに)リダイレクトしてもよく、サービスを不承認してもよく、及び/又は、そうでなければ、クライアントがサービス、ウェブサイト及び/又は関連データにアクセスすることを阻止してもよい。
【００５３】
有効なデバッグコンソールが検出されない場合、方法330は342へ進むことができる。クライアントは、JavaScriptが関連するサービス及び/又は他のウェブサイトデータに進むこと及び/又はアクセスすることができるだろう。
【００５４】
344において、1又は複数のサーバーは、保護されたJavaScriptに関するリクエストがクライアントからのリクエストか否かを判断するように構成することができる。このように、1又は複数のサーバーは、保護されたJaveScriptに関するリクエストを受信するように構成することができる。例えば、ウェブサイトがウェブブラウザにロードされると、クライアントのユーザーは、ウェブブラウザにおける「ソース表示」オプションを選択することができる。上述した通り、図4は、ウェブページ410に進んだ後にユーザーがソース表示オプションを選択したことに応答してクライアント上に示すことができるウェブページ410のソース表示画面400(例えば、HTMLドキュメントとしてエンコードされたウェブページ)の例を示す。保護されたJavaScriptに関するリクエストが346において受信されると、方法330は348へ進むことができる。
【００５５】
348において、1又は複数のサーバーは、リクエストが信頼されたリファラを経ての受信か否かを判断するように構成することができる。上記のように、HTTP規格では、リクエスト(例えば、346において受信される、保護されたJavaScriptに関するリクエスト)はフィールドの形式としてヘッダー情報を含むことを指定している。その意味において、リファラフィールドは、照会ドキュメント(例えば、図4のウェブページ410)が(例えば、図4のURL 402を経て)HTML構文中の追加のドキュメント(例えば、保護されたJavaScript)に関するHTTPリクエストを作成する場合に現れる。リファラフィールドは、(ディレクトリ、トップレベルドメイン、サブドメイン等を含む)照会ドキュメントのURLを含むことができる。このように、図4に示されるURL 404は、保護されたJavaScriptに関するリクエストがウェブページ410にアクセスしているユーザーを経て作成された場合の、リファラフィールドのデータの例である。当然のことながら、本願明細書で使用する「リファラフィールド」は、HTTPヘッダー情報にある「リファラフィールド」を指してもよい。ある実施形態において、リファラフィールドは、照会ドキュメント及び/又は照会ドキュメントの欠如を識別するネットワークプロトコル内の情報を指してもよい。
【００５６】
直接リクエストされたファイルの場合(例えば、保護されたJavaScriptが、ウェブページ410にアクセスすることを経てクライアントによってリクエストされていない場合)には、リファラの欠如は、空のリファラフィールドとなり得る。同様の結果は、ドキュメントURL(例えば、URL 402)がウェブブラウザ内のロケーションバーに直接入力された場合に発生する可能性がある。
【００５７】
ある実施形態において、ラッパーをリクエストの評価のために用いることができ、保護されたJavaScriptのデリバリー前に、確立済みの開発者仕様に従って応答をデリゲートすることができる。例えば、JavaServer Page(JSP)は、上記リクエストを評価し、適切なテキストファイルで応答することができる。ファイル拡張子は、「src」又は「href」リクエスト内のlocation stringのパラメーター要件の一部でないため、テキストドキュメントであるJSPドキュメントで応答することが可能であり、これよって、それらの規格に関する要件が満たされる。このように、ソース表示画像400は、図4に示すように、URL 406及び408の参照を含むことができる。
【００５８】
ウェブブラウザがcss-doc.jsp及びjavascript-doc.jspに関してリクエストする場合(例えば、ウェブページ410がクライアントによってアクセスされる場合)、リファラフィールドはURL 404を含むことができる。有効なリファラのデータベース(又は、1又は複数のデータベース)に対してURL 404を評価することができ、有効であることが明らかになった場合(例えば、URL404がJavaScriptに関する有効なリファラと一致する場合)、リクエストされた保護されたJavaScriptをデリゲートして、クライアントに返すことができる。
【００５９】
ある実施形態において、ウェブサイト又はサービス内の照会ドキュメントのいくつか又は全ては、有効なリファラの1又は複数のデータベースにドキュメント化することができる。ドキュメント名をデータベース管理システム(例えば正規化データ構造)に、又は、カンマ、スペース、引用符等によってトークン化されたテキストドキュメント内に保存してもよく、これによって、1又は複数のサーバーが効率的にリストをパースすることができる。
【００６０】
上記ドキュメントが照会ドキュメントなしに直接リクエストされると、1又は複数のサーバーはリファラの欠如を評価して、開発業者が(例えば、戻されたJSPドキュメント及び/又はテキストドキュメントを経て)適切なエラーメッセージを用いて応答することができるだろう。例えば、エラーメッセージには、図5のウェブブラウザ500の502に示すような、保護されたJavaScriptにアクセスできない旨の表示が含まれる。メッセージは、知的財産権保護に関する適切な法律情報を更に含むことができる。加えて及び/又は代わりに、アクセスの試みを記録することができる。
【００６１】
当然のことながら、ラッパーを使用してエラーメッセージを送ることによって、クライアントによる、保護されたJavaScriptソースコード、ソースコードを引き出すために使用できるデータ及び/又は保護されたJavaScriptの機能を曝露できるデータの表示を阻止することができる。加えて及び/又は代わりに、ラッパーは、ウェブブラウザが、保護されたJavaScriptをキャッシュするのを阻止することができ、これによって、リクエスト時及び/又は将来のアクセスが拒否される。このように、方法330は、ソースコードのアクセス容易性に対する障壁を提供することによって、悪意あるハッカーに対する妨害を補助することもできる。
【００６２】
350において、サーバーは、信頼されたリファラのデータベースに対してリクエストヘッダーを評価するように構成することができる。信頼されたリファラは、任意の適切な情報(例えばインターネットプロトコルアドレス、ユーザー名及び/若しくはパスワード並びに/又は任意の他の適切な情報であって本明細書においてリファラテキストと称されるものとして提供することができるもの)に基づいて認識することができる。
【００６３】
リファラテキストが、空である、信頼されたリファラのデータベースにおける対応するURLと一致しない、及び/又は、そうでなければリクエストされたJavaScriptに関する未許可のリファラテキストであるという判断に応じて、1又は複数のサーバーは、352においてエラーメッセージを送ることによって応答するように構成することができる。加えて、及び/又は代わりに、保護されたJavaScriptのスクリプトソースは、クライアントに送信されない。1又は複数のサーバーは、340において、保護されたJavascriptによって提供されるサービスに対するアクセスを拒否するように更に構成することができる。リファラテキストが信頼されたリファラのデータベースにおける対応するURLと一致する場合、サーバーは、サービス(例えば、保護されたJavaScript)に対するアクセスをクライアント装置に許可することができる。
【００６４】
346に一旦戻る。保護されたJavaScriptに関するリクエストが受信されないと、方法330は、334に戻ることができる。その場合、1又は複数のサーバーは、デバッグコンソールステータスに関してクライアントをポーリングすることができる。セッション全体にわたって実行される断続的又は時限的ポーリングは、最初のポーリングの後のデバッグコンソールの有効化を防止してもよい。
【００６５】
クライアントがコンテンツダウンロードの完了とポーリング間隔との間の期間においてデバッグコンソールを有効化することによって、方法330の一部を回避できる可能性があるため、ポーリングスクリプトを検索して無効化させる僅かな機会をデバッグコンソールに与えてしまう。
【００６６】
ある実施形態において、ポーリングスクリプトの無効化を効果的に阻害するために、サーバーは、ウェブブラウザにポーリング機能(例えば、アプリケーション)をバブル(bubble)及び/又はプッシュして、クライアントが最初のチェック後にデバッグコンソールを有効にしてこのセキュリティー手段を回避するのを阻止することができる。例えば、アプリケーションは、デバッグコンソールの有効化を検出すると即座に1又は複数のサーバーにメッセージを送信するように構成することができる。
【００６７】
任意のセキュリティー手段を回避可能な覚悟のある一部のハッカーが常に存在するであろう。その一方で、本願明細書において述べられる実施形態は、JavaScript及びカスケーディングスタイルシート(稀ではあるが、CSS IPを保護する必要な可能性があるもの)中に含まれる所有権のあるコードに基本的な知的財産権保護を提供することができる。
【００６８】
JavaScriptソースコードを曖昧にさせることよりはむしろ隠すことによって、開発業者は、オリジナルコードの保全性を維持することによってデバッグ作業段階を単純化できる可能性がある。更に悪意のあるハッカーを妨害するためか、コードの最適化を向上させるために、方法300及び/又は330を難読化技術及び/又はコード縮小技術と組み合わせてもよい。
【００６９】
方法300及び/又は330は、知的財産権を保護して利用するための直観的な機構を提供することができるため、JavaScriptの知的財産権をオープンソースにすること、会社の価値構築プロセスの一部としてそれを利用すること、及び/又は、例えば、クライアント装置によってそれらを幾つか組み合わせたものの選択肢が開発業者に与えられる。
【００７０】
ある実施形態において、方法330は、保護されたJavaScriptを提供するアプリケーションサーバーから分離されたサーバーで実行することができる。更に、方法330は、HTTPプロトコールに対する信頼性及びリクエスト/応答法内で発生する情報トランザクションの性質を理由として、多数のウェブアプリケーションサーバーによって実行することができる。その結果、PHP、Ruby(又は、任意の派生語)、Visual Basic Script、.NET、アパッチトムキャットは、スクリプト/プログラミング言語とそれらのアプリケーションサーバーの任意の同程度のセットと共に、Hide JSに関係するコンテンツ保護をデリバリーできる可能性がある。
【００７１】
ある実施形態において、方法330によってラップされたJavaScriptは、互換性があるように構築されたコンテンツデリバリーネットワークを通じてインスタンスを生成することができる。ウェブサイト又はサービスと同じアプリケーションサーバー上で方法330を実行することが可能な一方で、相当な性能オーバーヘッド問題がHTTPプロトコールを経たリクエストの増加によって引き起こされる可能性がある。
【００７２】
コンテンツデリバリーネットワークを、有効なトップレベルドメインの固有のサブドメインを有するサーバーの別々のセット上に、場合によっては、その後のサブドメインに設置することは、効率を向上させることができる。この技術を使用することによって、リクエスト水準の上昇を、リクエストを処理するために具体的に設計されたネットワークにデリゲートすることができる。
【００７３】
本願明細書に記載の本発明の多くの修正形態及び他の実施形態は、本発明のこれらの実施形態が上記記述及び関連した図面に示される教示の利益を有することを当業者に思い出させるだろう。したがって、本発明の実施形態は開示された特定の実施形態、変形例及び他の実施形態は、ここに記載の特許請求の範囲内に含まれることを意図しており、それに限定されるものではない。特定の用語が本明細書に用いられているが、それらは、限定の用途のためではなく、一般的かつ説明的な意味で使用されるにすぎない。
【図１】
2014534498.tif 000003
【図２】
2014534498.tif 000004
【図３Ａ】
2014534498.tif 000005
【図３Ｂ】
2014534498.tif 000006
【図４】
2014534498.tif 000007
【図５】
2014534498.tif 000008
【国際調査報告】
2014534498.tif 000009