我正在檢查是否可以分發node.js
應用程序封閉源代碼。不是客戶端JavaScript文件,而是服務器端文件作爲商業產品。我認爲代碼混淆/醜化不會提供真正的隱私。也許像打包/編譯源代碼到二進制文件可以幫助。這可能嗎?node.js代碼保護
11
A
回答
5
我做了一些關於NodeJS和v8代碼的搜索。
首先對存儲庫的NodeJS我發現,其中源代碼首先被裝載上的src/node.cc執行,線1128:
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)
哪個首先編譯串,(後來執行),採用:
Local<v8::Script> script = v8::Script::Compile(source, filename);
以看看V8源代碼在DEPS/V8 /包含/ v8.h,線639,編譯函數返回:
Compiled script object, bound to the context that was active
when this function was called. When run it will always use this
context.
我不確定腳本綁定到上下文的含義是什麼,但我認爲它不僅僅是一個二進制對象,您可以保存並傳輸到另一臺機器,而無需傳輸整個上下文。
編輯:深入研究v8.h,還有一個ScriptData類,它預編譯腳本以使編譯速度更快,並且可以與Script類一起使用,但Script類仍需要加載腳本時的原始來源。 (也許在打印錯誤時,它知道錯誤的來源。)
總之,我認爲沒有太多的工作是不可能的。
2
有一個很好的方法可以嘗試 - 重新編譯NodeJS源代碼。
打開的NodeJS src文件夾(nodejs-v0.xxx/lib/module.js),你會發現這一點:
// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
};
添加新的擴展,以適合您的需求。例如:
// 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);
};
然後重新編譯的NodeJS,並加密你的代碼,並重新命名xxx.js你的代碼文件擴展名xxx.jse。
2
相關問題
- 1. Node.js服務器端代碼保護
- 2. 保護Ruby代碼
- 3. PHP - 保護代碼
- 4. 保護PHP代碼
- 5. 源代碼保護
- 6. 保護Ruby代碼
- 7. 保護Node.JS API
- 8. Node.js/Express密碼保護頁面
- 9. 瞭解保護Firebase代碼
- 10. 如何保護代碼?
- 11. 保護android源代碼
- 12. 保護DLL的源代碼
- 13. 隱藏/保護Python代碼
- 14. 保護Excel的VBA代碼
- 15. 履歷保護代碼
- 16. 如何保護php代碼?
- 17. 如何保護源代碼?
- 18. Oracle - 保護源代碼
- 19. 保護Android源代碼
- 20. 保護我的代碼?
- 21. 保護AngularJS源代碼
- 22. 如何保護Javascript代碼?
- 23. 保護PHP源代碼
- 24. 保護源代碼段
- 25. 保護PHP MySQL代碼
- 26. PHP代碼保護庫
- 27. 密碼保護的SAS代碼
- 28. node.js如何保護文件?
- 29. 如何從反編譯保護或保護java代碼
- 30. 密碼保護
node.js很難與v8耦合。這意味着您需要在運行時使用v8來解釋您的源代碼。我認爲不可能做閉源。 – Raynos
Raynos是正確的,並且由於編譯開銷,這會降低應用程序的速度。 – alessioalex
是的,看看[這裏](http://stackoverflow.com/a/12640211/304141)預編譯你的代碼的方法。 –