web-dev-qa-db-ja.com

JavaScriptファイルを難読化または読み取り不能にするにはどうすればよいですか?

アプリケーションにJavaScript関数とjQuery関数を含むJavaScriptスクリプトがあります。私のアプリケーションとのすべてのユーザーインタラクションは動的であり、jQueryを介してアプリケーションに渡されます。

私が気付いたのは、アプリケーションを実行すると、クライアント側で、クライアントがページソース(Ctrl + U)。

ユーザーがソースを理解または読み取れないように、何かを非表示にしたり、実行したりするにはどうすればよいですか?

Facebookのようなことをしたいです。 Facebookのソースを表示することにより、ユーザーはそのソースコードを再利用したり、理解したりすることさえできません。

グーグルで調べたところ、このプロセスは難読化と呼ばれていますが、これはうまくいきません。

私はこれを試しました:

http://www.javascriptobfuscator.com/default.aspx

そして

http://dean.edwards.name/packer/

そして

http://www.daftlogic.com/projects-online-javascript-obfuscator.htm

私も試しました http://www.jasob.com/

しかし、それは私には役に立たない。

15
Bhargav

誰かが本当にあなたのコードを気にかけているなら、彼は縮小しない(ランダムを有用な変数/関数名に置き換える)という作業負荷を負います。 「暗号化」やパッキングなどの他のものは、非常に簡単に元に戻すことができるため、 スネークオイル です。したがって、作業を節約し、アプリケーションの改善に費やしてください。

つまり、本番システムで実行する必要があるのは、JSコードを縮小することだけです。これにより、ロードが小さくなり、ロードが速くなります。したがって、実際には利点があります。それに加えて、ざっと見たいだけなのに時間をかけたくない人には読みにくくなります。

たとえば、Facebook JSファイルは、帯域幅/パフォーマンス上の理由で縮小されている可能性があります。


JavaScriptを縮小する最も簡単な方法は、GoogleのWebサービスを使用することです。 http://closure-compiler.appspot.com/home
1MBの制限があるため、JSが非常に大きい場合は、Javaベースのミニファイアをダウンロードしてローカルで実行する必要がある場合があります。

24
ThiefMaster

ThiefMasterの言うことはすべて真実です。また、ユーザーがクライアント上のすべてを表示および操作できることを前提としてアプリを設計する必要があることにも注意してください。ユーザーが機密データを見たり、価格などの情報を操作したりするのを妨げると思われるために難読化が心配な場合は、安全なロジックがサーバー上に存在するようにアプリケーションを再設計する必要があります。

2
RSG

Javascriptのソースコードを縮小する必要があるので、javascriptコードを縮小するjavascriptプログラムを探しています。

なぜjavascriptミニファイア?なぜなら、私はWebサーバーからクライアントにランダム化されたJavaScriptコードを書いているからです。

Webサーバーで「node.js」を使用して、JavaScriptコードを生成し、その場で縮小してクライアントに送信するJavaScriptプログラムを実行する必要があります。

このjavascriptプログラムは、暗号化および復号化プログラムです。クライアントのjavascriptコードの結果には、暗号化されたデータのjsonまたは16進バージョンの各部分を復号化するjavascript関数が含まれている必要があります。この関数は、整数のプラス、マイナス、および乗算を実行します。場合によっては、2つの異なる演算を計算するための条件(if、then、else)を生成できます。この関数は、2つ以上のパラメーター入力を復号化するために使用されます。

これがランダム化された関数です。クライアントがプライベートデータを要求するたびに、Webサーバーは2つの異なるJavaScript関数を生成します。1つは暗号化用、もう1つは復号化用です。復号化機能がクライアントに送信されます。暗号化機能は、Webサーバーが個人データを暗号化してクライアントに送信するために使用されます。難読化するのは理にかなっています。プロセスが実行されるたびに、送信機能がまったく異なるたびに。

そして、暗号化/復号化が非常に安全であることを納得させるために、2つ以上のパラメーターの表形式の値変換をクライアントに追加します。ただし、表形式の値は、実際にはWebサーバー専用に作成された関数によって生成され、クライアントに送信されることのないいくつかの数値定数が含まれています。したがって、復号化する人はすべて定数値を持っている必要があります。

私はそのプロセスを説明しています:

  1. javascriptソースコードの難読化についていくつかのことがわかります。しかし、JavaScriptの難読化は、Webサーバーやブラウザーではまだ実装されていません...多分、それが起こる可能性があります...しかし、インターネットを介したすべての送信を「SSLサイズ化」することで、どのようなソリューションが役立つのでしょうか。

  2. 読み取り可能な暗号化/復号化機能を使用して、暗号化および復号化することができます。そして、SSL証明書のコストなしで。 「中間者」でさえ、暗号化されたデータを復号化します。そのためには、彼はjavascript関数を実行する必要があります。わかりました。しかし、javascript復号化機能も暗号化されていると想像してください...次に、「中間者」は復号化機能を実行してから、暗号化されたデータを復号化するjavascript関数である復号化されたコンテンツを再度復号化する必要があります。

そして、Webサーバーがクライアントに質問をし、一意の回答がクライアントの結果計算(インターネット経由で送信されない)によって処理される場合を想像してみてください...「中間者」が回答を得るのは不可能です。

私のアイデアをチェックしてください。どなたかからのコメントをお待ちしております。

0
user1587368