私は、HTM1、CSS、およびJavaScriptを使用して、堅牢でスケーラブルでかなり複雑なWebサイトエンジンを作成しています。私はそれがはぎ取られたくないので、クライアントで表示されないようにソースを保護する方法があるかどうか疑問に思っています。
私は特にJavaScriptについて心配しており、直接表示できない個別のファイルでJavaScriptをホストすることでJavaScriptを保護できるかどうか疑問に思っています。私は自分のWebサーバーを完全に制御でき、それに対応するために任意の設定を変更できます。
コードをどのように難読化するかに関係なく、誰でもコードを見るだけであなたが行っていることを複製できます。ゼロから書くのには少し時間がかかるかもしれませんが、それについてできることはあまりありません。
保護のための唯一の真の選択肢は、コードの著作権と、場合によっては特許の出願です。あなたがしていることが本当に違うのなら、おそらく特許が最善の方法です。
通常、アプリケーションの価値は実際にはサポート領域にあります。言い換えれば、人々はあなたがそれをサポートするのに十分長くいると彼らが感じるならばそれを買うでしょう。価格を設定するときは、このことに注意してください。
コードを盗んで再利用するだけのコードがあることに気付くでしょう。彼らはとにかく顧客に支払うつもりはなかったので、彼らについてあまり心配しないでください。代わりに、あなた自身の顧客があなたのものを購入して使用するのを簡単にします。必ずサポートを提供してください。そこから真の価値が生まれます。
正反対のことを行い、MIT/GPLライセンスを使用してコードをオープンソースとしてリリースします。コードに(ビジネス)名を付けて、アプリケーションXを最初に作成したことで知られています。評判は、「コードを保護する」という無駄な試みよりもはるかに遠くまで行きます。
コードを保護する JS/CSS/HTMLが関係している場合、それをバックエンドに保持することによってビジネスロジックを保護することが最善の方法です。
代表的な例として、CKEditorの独自の実装を作成することもできますが(多くの人がそれを実行します)、CKEditorを使用する方がはるかに簡単で、誰もがそれが何であるか、誰が作成したかなどを知っています。
または、グーグルマップを例にとると、周りにはたくさんのクローンがありますが、実際のグーグルマップは1つだけです。ヘック、他の人はグーグルの前にマップの実装を書いていましたが、グーグルマップはもっと有名です。
なぜコードを保護しようとするはばかげているだけでなく、実際には賢くないのか、多くの例を続けることができます...ビジネスロジックを保護することは1つのことですが、実際には公開することでさらに多くの利益を得ることができます派手なスマンシーフロントエンドコードで...
いいえ、それはできません。
すべてがブラウザ(クライアント)に送られます。醜いものや縮小したものなどを難読化することもできますが、最終的には、それを再び「暗号化」するのは簡単です。
ブラウザにすべてのソースを受信させたいので、それを非表示にすることもできません。したがって、「動的スクリプトタグ挿入を使用してJavaScriptをロードし、後でスクリプトタグを削除する」などのファンキーな動きをしたとしても。経験の浅いユーザーにとってはうまくいくかもしれませんが、Fiddler
のようなツールを使用すると再び真実がわかります。
あなたは単にそれをすることはできません。最小化機能を使用してJavaScriptとCSSを難読化することは、おそらく最も近い方法です。
さて、人気のある答えは「ウェブに載せないでください」になるでしょう。ただし、JavaScriptを難読化できるため、通常、誰もJavaScriptを盗むことはありません。関数名や変数名などを削除することは大いに役立ちます。一般的に、最初から始める方が簡単です。
インターネット上に置くことも、イントラネット経由でのみアクセスできるようにすることもできません。ただし、クライアントがサイト自体にアクセスするのを防ぐことなく、クライアントがhtml/css/JSにアクセスするのを確実に防ぐ方法はありません。
難読化は、カジュアルな試みや好奇心の閲覧を阻止しますが、すべてクライアント側で実装されているため、断固とした攻撃者/ブラウザを阻止することはできません。
HTML、CSS、およびJavaScriptを縮小すると少し役立ちますが、ユーザーはいつでもそれらを再フォーマットできます。最善の策は、クライアントに送信されるコンテンツが、使用している元のコンテンツと同じでない場合です。
これは、次の方法で実現できます。
しかし、それらすべてで、あなたが行くことができるのはこれまでのところだけです。 JavaScriptをコンパイルすると、元の意図に従うのが難しくなりますが、誰かがJavaScriptをリバースエンジニアリングすることを決心した場合、おそらく十分に難しくはありません。
JavaScript難読化ツールを使用できます。コードが読みにくくなります。彼らはまだ「それをはぎ取る」ことができますが、それを理解してそれを修正することは非常に難しいでしょう。コードを完全に隠す方法はありません。
私はこの問題についてよく考えましたが、率直に言って、できることはあまりありません。私が今まで出会った中で最高のものは、JSコンパイラを使用することです。
理論的には、実際にこれを行ったことはありませんが、可能であることがわかっています。1x1ピクセルのswfを介してjsをロードできる可能性があります。これはスクランブラーを介して送信されました。それを回避することはまだ可能ですが、それはfarより厄介になります。次に、暗号化されたコードをswfに送信し、クライアント側で復号化して(as3cryptライブラリを使用)、ブラウザに書き込むことができます。とはいえ、一連のコールバックにswfを使用していない限り、それでもブラウザーに書き込まれるである必要があるという事実の問題があります。 Firebugや他のブラウザのjsコンソールでは、ユーザーは「コンパイルされた」jsを取得できます。もちろん、AS3をスクリプト化して一連のコールバックを登録することは可能です...
私が言ったように、これはそうでないよりも仮説であり、牧歌的な状況で機能することは間違いありませんが、Flashは制限されており、AS3の知識が必要です。もちろん、この利点は、ユーザーが簡単に読むことができなくても、jsをブラウザーに取り込む方法であるということです。
JavaScriptコードをエンドユーザーから隠すことができるとは本当に信じていません。JavaScriptはサーバー側ではなくクライアント側で行われるため、プレーンテキストでソースコードを表示したり、サードパーティのプログラムにブラウザやエンドユーザーを傍受させたりする方がよいでしょう。タスクを完了するにはコードが必要です。
暗号化されている場合でも、エンドユーザーを完全かつ完全に制御できない限り、ある時点で、ブラウザがタスクを完了して表示するために暗号化を解除する必要があります。エンドユーザーはコードを取得します。クライアント側で実行されるコードをコンピュータが隠すことは不可能です。