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