Tôi đã kiểm tra xem liệu có thể phân phối một nguồn đóng ứng dụng node.js
hay không. Không phải là các tệp Javascript phía máy khách nhưng các tệp phía máy chủ là một sản phẩm thương mại. Tôi cho rằng mã obfuscation/uglification sẽ không cung cấp sự riêng tư thực sự. Có lẽ một cái gì đó giống như đóng gói/biên dịch mã nguồn thành nhị phân có thể giúp đỡ. Điều này có thể không?bảo vệ mã node.js
Trả lời
Tôi đã thực hiện một số tìm kiếm xung quanh mã NodeJS và v8.
lần thứ nhất về kho NodeJS tôi thấy nơi mã nguồn là lần đầu tiên nạp thực hiện trên src/node.cc, dòng 1128:
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)
nào đầu tiên biên dịch chuỗi, (và sau đó thực hiện), sử dụng:
Local<v8::Script> script = v8::Script::Compile(source, filename);
Lấy một cái nhìn tại các mã nguồn v8 tại DEPS/v8/include/v8.h, đường 639, hàm lợi nhuận Compile:
Compiled script object, bound to the context that was active
when this function was called. When run it will always use this
context.
Tôi không chắc chắn kịch bản nào bị ràng buộc trong ngữ cảnh, nhưng tôi cho rằng nó không chỉ là một đối tượng nhị phân mà bạn có thể lưu và chuyển sang máy khác mà không phải chuyển toàn bộ ngữ cảnh.
EDIT: Xem sâu hơn v8.h, cũng có một lớp ScriptData, biên dịch trước một tập lệnh để biên dịch nhanh hơn và có thể được sử dụng với lớp Script, nhưng lớp Script vẫn yêu cầu nguồn gốc khi tải tập lệnh. (Có thể vì khi in lỗi, nó biết nguồn gốc lỗi ở đâu.)
Tóm lại, tôi không nghĩ rằng nó có thể thực hiện được nếu không có nhiều công việc.
Có một phương pháp hay mà bạn có thể thử - Biên dịch lại mã nguồn NodeJS.
Mở thư mục nodejs src (nodejs-v0.xxx/lib/module.js), bạn sẽ tìm thấy điều này:
// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
};
Thêm phần mở rộng mới để phù hợp với nhu cầu của bạn. Ví dụ:
// 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);
};
Sau đó biên dịch lại nodejs và mã hóa mã của bạn và đổi tên phần mở rộng tệp mã từ xxx.js thành xxx.jse.
V8 được biết là biên dịch JavaScript nội bộ và thực thi nó. EncloseJS sử dụng tính năng này để tạo một tệp thực thi được biên dịch từ dự án node.js. EncloseJS là trình biên dịch cho nút/io.js - nó mang đến cho bạn sự riêng tư giống như trình biên dịch cổ điển.
Bạn có thể muốn thêm tuyên bố từ chối trách nhiệm cho câu trả lời của mình vì bạn là tác giả của cuốn sách EncloseJS. Tuy nhiên, giải pháp thú vị. – svimre
- 1. Bảo vệ mã phía máy chủ Node.js
- 2. Java Mã bảo vệ
- 3. Golang: bảo vệ mã nguồn
- 4. Mã Silverlight có cần bảo vệ không?
- 5. Vô hiệu hóa mã bảo vệ cho thông số kỹ thuật bảo vệ chạy
- 6. ghi đè nội bộ được bảo vệ bằng bảo vệ!
- 7. Bảo vệ video flash khỏi tải xuống/phải bảo vệ
- 8. bảo vệ csrf
- 9. Cách bảo vệ "." char?
- 10. Các công cụ bảo vệ mã trong Java
- 11. Chạy hàng loạt các công cụ bảo vệ mã VS
- 12. Mã hóa web.config bằng Cấu hình Bảo vệ vô nghĩa?
- 13. DropBox bảo vệ mã python của nó như thế nào?
- 14. Kinh nghiệm với việc bảo vệ mã PHP
- 15. Bảo vệ mã nguồn khi giao hàng cho khách hàng
- 16. Bảo vệ Mã trong Sổ làm việc Excel?
- 17. Bảo vệ các khóa mã hóa trong RAM?
- 18. Bẫy sao chép bảo vệ
- 19. Cách bảo vệ hoặc bảo mật mã java khỏi việc biên dịch
- 20. Scala có bảo vệ không?
- 21. được bảo vệ nội bộ
- 22. Lẫn lộn: nội bộ, bảo vệ và bảo vệ nội bộ
- 23. Cách miễn bảo vệ CSRF trên direct_to_template
- 24. Bảo vệ JWT bằng X509Certificate2 (JwtSecurityTokenHandler)
- 25. gói so với bảo vệ được bảo vệ bằng phản xạ Java
- 26. Java Client .class Bảo vệ tập tin
- 27. Org-mode: bảo vệ nhấn mạnh
- 28. gì được bảo vệ ảo mới
- 29. #include định dạng bảo vệ tiêu đề?
- 30. biến riêng tư hoặc được bảo vệ?
node.js được ghép nối với v8. Điều này có nghĩa là bạn cần sử dụng phiên bản 8 để giải thích mã nguồn của bạn tại thời gian chạy. Tôi không nghĩ rằng nó có thể làm nguồn đóng. – Raynos
Raynos là đúng, và bên cạnh đó sẽ làm chậm ứng dụng, vì chi phí biên dịch. – alessioalex
Có, hãy xem [đây] (http://stackoverflow.com/a/12640211/304141) để biết cách biên dịch trước mã của bạn. –