63

次のプロジェクトでnode.jsを使用したいのですが、上司は競合他社がソースコードを読み取れることを嫌っています。

JavaScriptコードを保護する方法はありますか?

4

14 に答える 14

71

これは、ノードのNativeExtensionを使用して実現できます

boostrap.js.jseファイルの拡張子ハンドラーを追加するファイルがあります

// register extension
require.extensions[".jse"] = function (m) {
 m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename));
};

require("YourCode.jse");

YourCode.jseソースコードの暗号化されたバージョンになります(復号化プロセスはネイティブ拡張で行われるため、復号化のキーはプレーンテキストのどこにもありません)。

これで、NativeExtensionsdecrypt関数がソースをjavascriptに変換し直しました。ビルドプロセス.jseですべてのファイルの暗号化されたバージョンを作成し、それらを顧客にリリースするだけです。ネイティブ拡張機能も必要ですが、あまり労力をかけずにコードを変更するのが少し難しくなりました。ネイティブの内線番号を自宅に呼び出してライセンス情報を確認し、著作権侵害を防止することもできます(これは著作権侵害を阻止するものではなく、解決策はありません)。

于 2012-02-06T16:33:50.150 に答える
18

ライセンス契約を含めて、ソースコードを提供するだけです。彼らはとにかくそれをカスタマイズしたいかもしれません。

于 2011-05-10T15:07:55.083 に答える
11

80以上のファイルで巨大な純粋なNodejsプロジェクトを完了したばかりなので、OPと同じ問題が発生しました。ハードワークには少なくとも最小限の保護が必要でしたが、この非常に基本的なニーズはNPMjsOSコミュニティではカバーされていなかったようです。怪我に塩を加えるJXCoreパッケージ暗号化システムは先週数時間でクラックされたので難読化に戻ります...

そこで、ファイルのマージ、醜さを処理する完全なソリューションを作成しました。指定したファイル/フォルダもマージから除外するオプションがあります。次に、これらのファイルはマージされたファイルの新しい出力場所にコピーされ、それらへの参照は自動的に書き換えられます。

node-uglifierのNPMjsリンク

node-uglifierのGithubリポジトリ

PS:人々がそれをさらに良くするために貢献してくれたら嬉しいです。これは泥棒とあなたのような勤勉なコーダーの間の戦争です。私たちの力を合わせて、リバースエンジニアリングの苦痛を増やしましょう!

于 2014-07-07T08:33:55.503 に答える
9

非常に明確にするために、クライアント側のJavascript(リモートサーバーから標準のWebブラウザーにダウンロードされたもの)は、元のソースの再構築(「難読化解除」)以降、どのように難読化しても、表示や変更から保護することはできません。技術的には些細なことです。(Javascriptの難読化は、広く使用されているセキュリティの誤称「隠すことによるセキュリティ」の単なる別の例です。)

JavascriptとNode.jsを使用して保護された「製品」(このコンテキストでは、会社が制御していないサーバーへのインストールを必要とするアプリケーションまたはサービス)を提供する場合、あなた(難読化)はそのような保護を提供しません。

製品がバイナリ実行可能ファイルとして提供されている場合でも、バイナリを理解可能な形式に逆コンパイルできるため、製品に含まれる知的財産を保護できる保証はありません。この場合、低レベルのマシンコード(逆コンパイルによって提供される)を最新のプログラミング言語で使用される高レベルのロジック構造に変換するために必要な過剰なリソース(時間/専門知識)に基づいて、ある程度のセキュリティを享受します。(これは、CP / Mを逆コンパイルして内部設計を手作業で理解した人からのものです。;)

ただし、すべてが失われるわけではありません。プログラムで知的財産を保護できると仮定すると(陪審員はまだこれに取り組んでいます)、Node.jsベースの製品を安全な方法で提供する方法がありますが、それはNode.jsソースコードの大幅なリファクタリングが必要になるため、技術的には冒険的ではありません(暗号的に安全なライブラリのサポートを追加し、プロプライエタリライブラリのオブジェクトリフレクションを削除または保護するため)。

于 2011-05-10T18:42:23.617 に答える
6

サーバー側のJavaScriptコードは完全にクローズドソースです。誰もそれを読むことができません。

クライアント側のJavaScriptコードは完全にオープンソースです。誰でも読むことができます。

後者の場合、RoR、ASP.NET、PHPなどにも同じことが当てはまります。

実際のサーバーコードは、公開されていない限り閉じられます。

ライブラリを作成してサードパーティのソースとして販売しようとすると、オープンになり、盗まれる可能性があります。もちろん、著作権侵害で彼らを訴えることができます。

盗まれる可能性のあるライブラリを販売しているextjsのようなさまざまな大企業があります。そのため、実際に販売しているのはコードとサポートサービスです。

ノード上に構築されるほとんどの商用プロジェクトはサービスです。

于 2011-05-10T14:07:36.330 に答える
5

JXcore(node.js 0.11.Xディストリビューション)には、ソースコードとアセットを保護する独自のJXパッケージ機能があります。その特定のパッケージを他のアプリケーションから使用できるかどうかを選択することもできます。(スタンドアロンORライブラリ)

多くのJSなどのファイルがあり、モジュールへのエントリポイントが次のようなものであるとします。

exports.doThis = function() { ...... };

以下のメソッドを呼び出してJXパッケージにコンパイルするだけで、ソースコードは安全になります。

jxcore.utils.hideMethod(exports.doThis);

これは(メソッドの非表示)であり、呼び出し元のアプリケーションから他のすべてのサブJSファイルに到達できないため、エントリファイルにのみ必要です。

JXパッケージを実行するにはJXcoreが必要です。

詳細については、JXcoreから入手できます。

于 2014-01-29T11:52:24.887 に答える
4

コアロジックをモジュールにパッケージ化します。これらのモジュールを構築して、Googleのクロージャーを介して実行できます。ビルドプロセスの一部として、 Gruntタスクとしてこれを実行することもできます。

これは古い質問ですが、指摘する価値があります。注:コードを実際に隠すことは何もしませんが、.Net(C#)またはJavaを介して出荷されることもありません。一般に、単にuglifyのようなツールを使用するか、クロージャで十分な難読化ポイントになるはずです。モジュール式でクロージャーを使用することにより、実際には、他の方法では困難な多くの最適化を行うことができます。

于 2012-12-31T20:23:14.857 に答える
4

EncloseJSを使用できます-node.jsプロジェクト用のコンパイラ。それは実際にJavaScriptをネイティブコードにコンパイルし、あなたのソースはバイナリに含まれていません。

于 2015-02-16T17:30:50.513 に答える
3

あなたはあなたのスクリプトを難読化するためにnodejsのためにpackerを使うことができます...

于 2011-05-10T15:02:28.983 に答える
1

誰もあなたのコードを読めないことを絶対に確信できる方法はありません。ただし、難読化または縮小化を使用すると、コードのデコードが非常に困難になる可能性があります。難読化/ミニファイアの一例は、JavaScript用のGoogleのClosureCompilerです。

于 2011-05-10T14:11:57.413 に答える
1

誰かがnexeまたはpkgを試しましたか?

これらは良い選択肢のようです。Node.jsアプリケーションを単一の実行可能ファイルにコンパイルするコマンドラインユーティリティ。

于 2018-03-17T04:53:08.297 に答える
1

この記事を確認してください。

Node.js(JavaScript)コードをV8バイトコードに「真に」コンパイルする方法を紹介します。これにより、難読化やその他のあまり効率的ではないトリック(アプリのバイナリに埋め込まれる秘密鍵を使用してコードを暗号化するなど)よりも優れた方法でソースコードを非表示または保護できます。そのため、私は「本当に」と言いました。その上)。

したがって、bytenodeツールを使用して、JavaScriptファイルのバイナリバージョン.jscを配布できます。Browserifyを使用してすべての.jsファイルをバンドルしてから、その単一のファイルを.jscにコンパイルすることもできます。

Githubのバイトノードリポジトリを確認してください。

于 2019-12-06T21:35:37.480 に答える
0

Pkgが重宝します。

生成された出力ファイルにソースが含まれていないことを確認するに は、ソースを強制的に含める(など)がpackage.json指定されていないことを確認します。詳細については、 https://github.com/vercel/pkg/issues/190を参照してください。license"license": "ISC"

于 2021-02-13T16:23:53.660 に答える
-4

考えがある。jsの代わりにcppまたはアプリケーションを保護します。java

  1. コードを暗号化形式でラップし、utf-8 ファイルリソースとしてコンパイルします。
  2. cppまたはアプリケーションを使用javaしてファイル全体をまたはにアップロードしlinux pcarm computer強力なパスワードを持っていることを確認するかssh port、ビデオポートを閉じるか無効にして、WebのみでLinuxPCを参照します。
  3. LinuxPCでファイルを復号化するためのcppプログラムがあります。
  4. LinuxPCを制御するWebサーバーを開発します。

したがって、これはブラックボックスによく似ており、クライアントはコードに対して何もできません。

于 2016-05-26T02:13:11.890 に答える