web-dev-qa-db-ja.com

node.js-コード保護?

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

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

53
Van Coding

ノードのNativeExtensionでこれを達成できます

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

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

require("YourCode.jse");

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

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

61

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

17
Mike Blandford

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

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

node-uglifierのNPMjsリンク

node-uglifierのGithubリポジトリ

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

10
user2667976

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

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

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

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

9
Rob Raisch

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

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

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

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

jxcore.utils.hideMethod(exports.doThis);

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

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

詳細は JXcore から入手できます。

5
Nuray Altin

サーバー側のjavascriptコードは完全に閉じられたソースです。誰も読むことができません。

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

後者の場合、RoR、ASP.NET、PHPなどにも同じことが言えます。

公に利用可能にしない限り、実際のサーバーコードは閉じられます。

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

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

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

5
Raynos

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

4
Igor Klopov

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

これは古い質問ですが、指摘する価値があります。注:コードを完全に隠すものは何もありませんが、.Net(C#)またはJavaを介して出荷されるものは何もありません。モジュール化してクロージャーを使用することにより、実際には多くの最適化を行うことができます。

4
Tracker1

nodejsで packer を使用してスクリプトを難読化できます...

3
oshimin

誰もが試みた nexe または pkg

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

1
Ligo George

誰もあなたのコードを読むことができないことを絶対に確信できる方法はありません。ただし、難読化または縮小を使用すると、コードのデコードが大幅に難しくなる可能性があります。難読化ツール/縮小ツールの1つの例は、GoogleのJavaScript用の Closure Compiler です。

1
jwueller