web-dev-qa-db-fra.com

node.js - Protection de code?

Je veux utiliser node.js dans mon prochain projet, mais mon patron n'aime pas que nos concurrents puissent lire le code source.

Existe-t-il un moyen de protéger le code JavaScript?

53
Van Coding

Vous pouvez accomplir cela avec un NativeExtension pour le nœud

Vous auriez un boostrap.js fichier qui ajoute un gestionnaire d'extension pour les fichiers .jse

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

require("YourCode.jse");

YourCode.jse serait la version chiffrée de votre code source (la clé du déchiffrement ne serait nulle part en texte brut car le processus de déchiffrement a lieu dans l'extension native).

Vous avez maintenant votre fonction NativeExtensions decrypt qui transforme la source en javascript. Demandez à votre processus de génération de créer un cryptage .jse versions de tous vos fichiers et communiquez-les à vos clients. Ils auraient également besoin de l'extension native, mais maintenant vous avez rendu un peu plus difficile la modification de votre code sans trop d'effort. Vous pouvez même faire en sorte que l'extension native appelle la maison et vérifier les informations de licence pour empêcher le piratage (gardez à l'esprit que cela n'arrêtera pas le piratage, il n'y a pas de solution pour cela).

61

Incluez simplement un accord de licence et donnez-leur le code source. Ils voudront peut-être le personnaliser de toute façon.

17
Mike Blandford

Comme je viens de terminer un énorme projet pur Nodejs dans plus de 80 fichiers, j'ai eu le même problème que OP. J'avais besoin d'au moins une protection minimale pour mon travail acharné, mais il semble que ce besoin très basique n'ait pas été couvert par la communauté NPMjs OS. Ajoutez du sel aux blessures, le système de cryptage du package JXCore a été fissuré la semaine dernière en quelques heures, donc revenons à l'obscurcissement ...

J'ai donc créé la solution complète, qui gère la fusion des fichiers, la uglification. Vous avez la possibilité de supprimer également les fichiers/dossiers spécifiés de la fusion. Ces fichiers sont ensuite copiés vers le nouvel emplacement de sortie du fichier fusionné et les références à ceux-ci sont réécrites automatiquement.

Lien NPMjs du nœud-uglifier

Repo Github de node-uglifier

PS: Je serais heureux si les gens contribuaient à le rendre encore meilleur. Il s'agit d'une guerre entre les voleurs et les codeurs qui travaillent dur comme vous. Unissons nos forces, augmentons la douleur de la rétro-ingénierie!

10
user2667976

Pour être très clair, le Javascript côté client (tel que téléchargé depuis un serveur distant dans un navigateur Web standard) ne peut pas être protégé contre la visualisation et/ou la modification, peu importe comment vous l'obscurcissez depuis la reconstruction ("désobfuscation") de la source d'origine est techniquement trivial. (L'obscurcissement de Javascript est simplement un autre exemple de la dénomination de sécurité largement utilisée "la sécurité par l'obscurité".)

Si vous souhaitez utiliser Javascript et Node.js pour fournir un "produit" protégé (qui dans ce contexte est une application ou un service nécessitant une installation sur un serveur que votre entreprise ne contrôle pas), vous ne pouvez pas non plus le sécuriser comme seule option disponible pour vous (l'obscurcissement) n'offre pas une telle protection.

Il convient de noter que même si votre produit est fourni en tant qu'exécutable binaire, ce n'est pas une garantie, vous pouvez protéger la propriété intellectuelle qu'il contient, car tout binaire peut être décompilé dans un format compréhensible. Dans ce cas, nous bénéficions d'un certain niveau de sécurité basé sur les ressources excessives (temps/expertise) nécessaires pour convertir le code machine de bas niveau (tel que fourni par la décompilation) dans les constructions logiques de niveau supérieur utilisées par les langages de programmation modernes. (Ceci de celui qui a une fois décompilé CP/M dans une compréhension de sa conception interne à la main.;)

Cependant, tout n'est pas perdu: si nous supposons que l'on peut protéger la propriété intellectuelle par programme (le jury n'est toujours pas sur celui-ci), il existe un moyen de fournir un produit basé sur Node.js de manière sécurisée, mais ce n'est pas pour techniquement peu aventureux car cela nécessiterait une refactorisation substantielle du code source Node.js (pour ajouter la prise en charge des bibliothèques sécurisées par cryptographie et supprimer - ou autrement protéger - la réflexion des objets pour vos bibliothèques propriétaires.)

9
Rob Raisch

JXcore (distribution node.js 0.11.X) a sa propre fonctionnalité de packaging JX qui sécurise le code source et les ressources. Vous pouvez même choisir si ce package particulier peut être utilisé à partir d'autres applications ou non. (autonome OR)

Disons que vous avez de nombreux fichiers JS, etc. et que le point d'entrée vers votre module est quelque chose comme;

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

si vous appelez simplement la méthode ci-dessous et la compilez dans le package JX, le code source sera sûr.

jxcore.utils.hideMethod(exports.doThis);

c'est (masquage de la méthode) ne serait nécessaire que pour le fichier d'entrée car tous les autres fichiers JS secondaires ne sont pas accessibles depuis l'application appelante.

Vous avez besoin de JXcore pour exécuter les packages JX.

Plus d'informations sont disponibles sur JXcore

5
Nuray Altin

Le code javascript côté serveur est une source complètement fermée. Personne ne peut le lire.

Le code javascript côté client est complètement open source. Tout le monde peut le lire.

Pour ce dernier, vous ne pouvez rien faire, mais il en va de même pour RoR, ASP.NET, PHP, etc.

Le code de serveur réel est fermé, sauf si vous le rendez public.

Si vous créez une bibliothèque et essayez de la vendre en tant que source tierce, elle est ouverte et peut être volée. Bien sûr, vous pouvez les poursuivre pour violation du droit d'auteur.

Il existe diverses grandes entreprises comme extjs qui vendent des bibliothèques qui pourraient être volées, c'est pourquoi ce qu'elles vous vendent en réalité, c'est le code et un service d'assistance.

La plupart des projets commerciaux construits sur le nœud sont des services.

5
Raynos

Vous pouvez utiliser EncloseJS - compilateur pour les projets node.js. Il compile vraiment JavaScript en code natif, et vos sources ne sont pas incluses en binaire.

4
Igor Klopov

Empaquetez votre logique de base en modules .. ces modules peuvent être construits puis exécutés fermeture de Google . Vous pourriez même être en mesure de le faire en tant que tâche Grunt dans le cadre de votre processus de construction.

C'est une vieille question mais mérite d'être soulignée. Remarque: rien de ce que vous faites ne cachera vraiment votre code, mais rien ne sera expédié via .Net (C #) ou Java d'ailleurs. En général, il suffit d'utiliser un outil comme uglify, ou la fermeture devrait être assez d'un point d'obscurcissement. En étant modulaire et en utilisant la fermeture, vous pouvez réellement faire beaucoup d'optimisations qui autrement seraient difficiles.

4
Tracker1

vous pouvez utiliser packer pour nodejs pour obscurcir votre script ...

3
oshimin

Quelqu'un a essayé nexe ou pkg ?

Cela semble être une bonne option. Un utilitaire de ligne de commande qui compile votre application Node.js en un seul fichier exécutable.

1
Ligo George

Il n'y a aucun moyen que vous soyez absolument sûr que personne ne pourra lire votre code. Vous pouvez utiliser l'obscurcissement ou la minification, ce qui peut toutefois rendre le décodage de votre code beaucoup plus difficile. Un exemple d'obfuscateur/minifieur est Closure Compiler de Google pour JavaScript.

1
jwueller