Sécuriser la distribution d'applications NodeJS
Quoi: Peut NodeJS apps être distribués en tant que binaire? c'est à dire. vous compilez le .js application via V8 dans sa binaire natif, et de distribuer des binaires à ses clients? (si vous avez un accès total au serveur NodeJS)... ou est-minifying le code tout ce que vous pouvez faire?
Pourquoi: Nous construisons serverside applications NodeJS pour les clients, qui ont souvent à être hébergés sur le client serveurs. La distribution de code source signifie que les clients peuvent facilement s'emparer de notre solution et de cesser de payer les frais de licence. Cela ouvre la possibilité de facile de la rétro-ingénierie ou la réutilisation de nos apps sans notre conscience.
- Voir Node.js code de protection de l' et Est-il un moyen pour compiler node.js les fichiers source?. Il n'est pas facilement possible.
- Ce que vous avez à faire est de ce n'est pas vraiment un problème technique.
- Plus la discussion ici: groups.google.com/group/nodejs/browse_thread/thread/...
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez créer un format binaire. V8 vous permet de pré-compilation JavaScript. Notez que cela peut avoir un tas d'étranges effets secondaires sur les hypothèses formulées par le nœud de base.
Juste parce que vous distribuez le binaire ne vous protège pas againsts vol. Ils peuvent encore voler le code binaire ou de le démonter. C'est de la protection par l'obscurité qui n'est pas une protection à tous.
Il est préférable de leur donner un thin client app qui parle à votre serveur et de garder votre code serveur sécurisé par ne pas le donner.
Oui c'est possible, utilisez ce branche(basé sur 0.8.18) et tout code js que vous mettez dans 'deps/v8/src/extra-snapshot.js" seront en avance sur le temps compilé en code machine et intégrées dans des v8 dans le cadre de la normale builtin l'initialisation de l'objet. Vous aurez besoin de construire nodejs pour chaque plate-forme que vous souhaitez déployer votre produit.
La snapshotted code s'exécute très tôt dans le v8 de l'initialisation et vous ne pouvez pas accéder builtin objets dans le module 'corps'. Ce que vous pouvez faire est de mettre tout votre code à l'intérieur d'un mondial de l'initialisation de la fonction qui doit être appelée plus tard. Ex:
Aussi, cela suppose que votre code est défini dans un fichier unique, donc si votre projet utilise des nodejs système de module(exiger), vous devez écrire un script qui va regrouper tous vos fichiers dans un seul et envelopper chaque fichier dans une fermeture qui va tromper votre code en pensant que c'est normal d'un module nodejs. Probablement chaque module de fermeture d'exposer un besoin de la fonction, et cette fonction aurait pour décider quand délégué à la norme mondiale.besoin d'un ou de retourner les exportations à partir de vos autres modules intégrés. Voir comment javascript module de mise en œuvre des systèmes pour des idées(requirejs est un bon exemple).
Cela permettra de rendre votre code plus difficile à déboguer depuis que vous avez l'habitude de voir des traces de pile pour le code natif.
Mise à JOUR:
Même à l'aide d'un v8 de snapshots le code est intégré dans le node.js binaire car v8 préfère paresseux compilation. Voir cette pour plus d'informations.
EncloseJS.
Vous obtenez un entièrement fonctionnel binaire sans les sources.
Code JavaScript est transformé en code natif au moment de la compilation à l'aide de V8 interne du compilateur. Par conséquent, vos sources ne sont pas nécessaires pour exécuter le binaire, et ils ne sont pas emballés.
Parfaitement optimisé en code natif peut être générée uniquement au moment de l'exécution basé sur la machine du client. Sans cette info EncloseJS peut générer seulement "unoptimized" du code. Il fonctionne sur 2x plus lent que NodeJS.
Aussi, node.js exécution de code est mis à l'intérieur de l'exécutable (avec votre code) de nœud support de l'API pour votre application au moment de l'exécution.
Cas d'utilisation:
Test de votre application contre le nouveau nœud version sans installation.
pkg
est open source et distribué sous licence MIT. github.com/zeit/pkgJe suis en train d'étudier la même chose et je suis à la recherche à nexe qui prétend être capable de "créer un exécutable unique de votre node.js apps".
Ne peux pas vous dire si c'est tout bon pour l'instant, mais pensé qu'il serait intéressant de partager déjà.
V8 génère du code machine natif à l'interne et à l'exécute. Regardez ici: https://github.com/v8/v8-git-mirror/blob/master/src/compiler.cc#L1178 . Cette fonctionnalité est utilisée dans EncloseJS. EncloseJS analyse les sources de votre node.js projet, les faisceaux de dépendances, et fait un binaire exécutable. Les sources ne sont pas inclus dans le paquet binaire compilé en code machine.