Stavo controllando per vedere se è possibile distribuire un'applicazione closed source node.js
. Non i file Javascript lato client ma i file lato server come prodotti commerciali. Suppongo che l'offuscamento/l'offuscamento del codice non fornirà una vera privacy. Forse qualcosa come l'imballaggio/compilazione del codice sorgente in binario potrebbe aiutare. È possibile?node.js protezione codice
risposta
Ho eseguito alcune ricerche attorno al codice NodeJS e v8.
In primo luogo sul repository NodeJS ho trovato in cui il codice sorgente viene caricato prima esecuzione su src/node.cc, linea 1128:
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)
Quale primo compila la stringa, (e poi esegue), utilizzando:
Local<v8::Script> script = v8::Script::Compile(source, filename);
Dando uno sguardo al codice sorgente v8 alle dipendenze/V8/include/v8.h, la linea 639, la funzione ritorna di compilazione:
Compiled script object, bound to the context that was active
when this function was called. When run it will always use this
context.
Non sono sicuro di quale sia lo script associato al contesto, ma direi che non è solo un oggetto binario che è possibile salvare e trasferire su un'altra macchina senza dover trasferire l'intero contesto.
MODIFICA: dando un'occhiata più approfondita a v8.h, c'è anche una classe ScriptData, che precompila uno script per rendere la compilazione più veloce e che può essere utilizzata con la classe Script, ma la classe Script richiede ancora la fonte originale quando si carica lo script. (Forse per quando si stampano errori, sa dove l'origine dell'errore.)
In sintesi, non penso sia possibile senza molto lavoro.
C'è un buon metodo che puoi provare - Ricompilare il codice sorgente NodeJS.
Aprire la cartella src nodejs (nodejs-v0.xxx/lib/module.js), si trova questo:
// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
};
Aggiungi nuova estensione per la tua vacanza. Per esempio:
// Native extension for .jse (encrypted js)
Module._extensions['.jse'] = function (module, filename) {
var content = stripBOM(NativeModule.require('fs').readFileSync(filename, 'utf8')).split('').reverse().join('');
module._compile(content, filename);
};
quindi ricompilare nodejs, e criptare il codice e rinominare il codice di estensione del file da xxx.js a xxx.jse.
V8 è noto per compilare JavaScript internamente ed eseguirlo. EncloseJS utilizza questa funzione per rendere un eseguibile compilato dal progetto node.js. EncloseJS è un compilatore per node/io.js - ti dà la stessa privacy del compilatore classico.
È possibile aggiungere una dichiarazione di non responsabilità alla risposta, poiché si è l'autore di EncloseJS. Tuttavia, soluzione interessante. – svimre
- 1. Protezione/Protezione del codice in JavaScript
- 2. Protezione SSJS da codice non verificato
- 3. Esperienza con la protezione del codice PHP
- 4. Delphi 7 TIdFTP Protezione FTP (protezione password)
- 5. Protezione Flash Codice AS3 + comunicazione sicura con il server
- 6. protezione del codice sorgente in un'applicazione desktop node-webkit
- 7. Node.JS debug errore VS Codice EADDRINUSE
- 8. Clausole di protezione refactoring
- 9. Protezione licenze applicazioni vs Protezione copia in Android
- 10. Protezione memoria senza MMU
- 11. Protezione cookie e sessioni
- 12. e protezione della memoria
- 13. Protezione DDOS Microsoft Azure
- 14. Protezione del mio sito
- 15. Protezione thread WebLogic bloccato
- 16. Protezione tipo TypeScript Oddity
- 17. Protezione di JSONP?
- 18. Protezione CSRF nell'applicazione Web
- 19. Protezione stringa in APK
- 20. Fornitore di protezione registrazione Android
- 21. Protezione del PDF con PDFBox
- 22. Protezione dall'iniezione SQL in python
- 23. Protezione della filettatura con lambda
- 24. Interceptor token Struts2: protezione CSRF
- 25. Node.js alla comunicazione Node.js
- 26. Protezione password app per iPhone
- 27. File Elmah.axd con protezione password
- 28. Protezione di una richiesta Ajax
- 29. Color.FromArgb (...); la protezione dei messaggi
- 30. Protezione dall'iniezione SQL in ColdFusion
node.js è associato a v8. Ciò significa che è necessario utilizzare v8 per interpretare il codice sorgente in fase di esecuzione. Non penso sia possibile fare closed source. – Raynos
Raynos ha ragione, e inoltre rallenterebbe l'applicazione, a causa del sovraccarico di compilazione. – alessioalex
Sì, guarda [qui] (http://stackoverflow.com/a/12640211/304141) per un modo per precompilare il tuo codice. –