Sprawdzałem, czy możliwe jest rozpowszechnianie zamkniętego źródła aplikacji node.js
. Nie pliki JavaScript po stronie klienta, ale pliki po stronie serwera jako produkt komercyjny. Przypuszczam, że kod zaciemniania/uciskania nie zapewni prawdziwej prywatności. Może coś w rodzaju pakowania/kompilowania kodu źródłowego do binarnego mogłoby pomóc. czy to możliwe?ochrona kodu node.js
Odpowiedz
Zrobiłem trochę wyszukiwania wokół kodu NodeJS i v8.
Pierwszy na NodeJS repozytorium znalazłem gdzie kod źródłowy jest najpierw ładowany wykonywany w src/node.cc, linia 1128:
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)
który po raz pierwszy zestawia ciąg (i później wykonuje), używając:
Local<v8::Script> script = v8::Script::Compile(source, filename);
Przyjrzeniu kodzie v8 w liczbą wykazywanych zależności/V8/to/v8.h, linia 639, funkcja zwraca opracowanie:
Compiled script object, bound to the context that was active
when this function was called. When run it will always use this
context.
Nie jestem pewien, co oznacza skrypt związany z kontekstem, ale twierdzę, że nie jest to tylko obiekt binarny, który można zapisać i przenieść na inną maszynę bez konieczności przesyłania całego kontekstu.
EDYCJA: Przyjmując głębsze spojrzenie na v8.h, istnieje również klasa ScriptData, która wstępnie kompiluje skrypt, aby uczynić kompilację szybszą, i która może być używana z klasą Script, ale klasa Script nadal wymaga oryginalne źródło podczas ładowania skryptu. (Może za błędy w drukowaniu, wie, skąd pochodzi błąd.)
Podsumowując, nie sądzę, że jest to możliwe bez dużej pracy.
Istnieje dobra metoda, którą można wypróbować - Przekompiluj kod źródłowy NodeJS.
Otwórz folder nodejs src (nodejs-v0.xxx/lib/module.js) znajdziesz poniżej:
// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
};
Dodaj nowe rozszerzenie do swoich potrzeb. Na przykład:
// 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);
};
Następnie skompilować nodejs i zaszyfrować swój kod i zmienić swój kod rozszerzenie pliku z xxx.js do xxx.jse.
V8 jest znany ze skompilowania JavaScriptu wewnętrznie i wykonania go. EncloseJS używa tej funkcji, aby utworzyć skompilowany plik wykonywalny poza projektem node.js. EncloseJS to kompilator dla node/io.js - zapewnia to prywatność jak klasyczny kompilator.
Możesz dodać zastrzeżenie do swojej odpowiedzi, ponieważ jesteś autorem EncloseJS. Niemniej ciekawe rozwiązanie. – svimre
- 1. Ochrona kodu po stronie serwera Node.js
- 2. Ochrona kodu Visual Studio 2015 Zły plik
- 3. node.js Zakończenie kodu/intellisense
- 4. Aktualizacja kodu Node.js w MongoDB
- 5. Ochrona JKS
- 6. ochrona przed kopiowaniem phonegap
- 7. Ochrona pamięci bez MMU
- 8. Ochrona przed muieblackcat BOT
- 9. Ochrona przed wolnością
- 10. Ochrona oprogramowania dla małych dostawców
- 11. Pierwsza logika, ochrona WCF później?
- 12. C++: Ochrona pamięci współdzielonej OpenMP
- 13. C++ i ochrona pamięci procesu
- 14. Ochrona aplikacji cf.net (antidebug, niejasny)
- 15. Obraz szynowy i ochrona śledzenia
- 16. spray ochrona: jak chronić trasy?
- 17. Framework i ochrona odbić Java
- 18. Przechwytywacz tokenów Struts2: ochrona CSRF
- 19. Ochrona kluczy kryptograficznych w pamięci RAM?
- 20. @PreAuthorize adnotacji nie działa ochrona wiosny
- 21. node.js - Uzyskiwanie dostępu do kodu wyjścia i stderr polecenia systemowego
- 22. Konwersja node.js fragment kodu na Javascript (Google Apps Script)
- 23. Ochrona zawartości publicznej/w aplikacji Railsowej
- 24. Ochrona żądania GET w aplikacji internetowej Django
- 25. Ochrona słoika Javy Pliki do dystrybucji
- 26. Ochrona przed iniekcją SQL w ColdFusion
- 27. Ochrona przed iniekcją SQL w pythonie
- 28. Jak działa ochrona przed lukami AngularJS JSON?
- 29. Hasło Ochrona pliku Excel w C#
- 30. Laravel 4: ochrona tras dostarczanych przez kontroler
node.js jest mocno sprzężony z V8. Oznacza to, że musisz użyć v8, aby zinterpretować kod źródłowy w czasie wykonywania. Nie sądzę, że możliwe jest zamknięcie źródła. – Raynos
Raynos ma rację, a poza tym spowolniłoby aplikację, ze względu na kompilację kosztów ogólnych. – alessioalex
Tak, spójrz [tutaj] (http://stackoverflow.com/a/12640211/304141), aby uzyskać prekompilację kodu. –