Bảo vệ mã nguồn trong javascript không có sẵn trong NodeJS. Giải pháp khả thi là biên dịch mã ở dạng nhị phân hoặc mã hóa mã
Giải pháp được cung cấp mã hóa các tệp javascript có logic nghiệp vụ quan trọng để mã không thể đọc được dễ dàng
Vòng đời thực thi tập lệnh NodeJS
Các giải pháp khả thi để bảo vệ mã nguồn
Ứng dụng có thể thực thi
- Biên dịch mã nguồn ứng dụng hoàn chỉnh thành một tệp thực thi duy nhất
- Vận chuyển tệp thực thi duy nhất này cũng sẽ bao gồm thời gian chạy NodeJS
- Thật không may, mã nguồn được nhúng dưới dạng chuỗi đơn giản bên trong mã nguồn nhị phân và ứng dụng có thể trích xuất dễ dàng
- Có những gói có sẵn cho việc này như pkg
Mã hóa bằng tệp JSE
- Mã hóa tệp mã javascript (. js để. tập tin jse)
- Yêu cầu mô-đun của nodejs hỗ trợ các chức năng xử lý tiện ích mở rộng
- Vì vậy, hãy viết một hàm để xử lý các tệp jse
- Viết module giải mã file jse thành file js
Ghi chú. Thật không may vì phương pháp giải mã có thể truy cập công khai, bất kỳ ai cũng có thể giải mã nguồn một cách đơn giản
// register extension require.extensions[".jse"] = function (m) { m.exports = MyNativeExtension.decrypt(fs.readFileSync(m.filename)); }; require("YourCode.jse");
Giải pháp tốt nhất
- Mã hóa các tệp javascript trong quá trình xây dựng hoặc trước khi đóng gói cho khách hàng
- Giải mã tệp trong bộ nhớ ngay trước khi chạy bằng các nhị phân NodeJS được tạo tùy chỉnh
Vòng đời thực thi tập lệnh được cập nhật
Sử dụng nhị phân NodeJS dựa trên mã hóa
Để mã hóa mã nguồn, mã hóa. tập tin js có thể được sử dụng
Tập tin này thực hiện các thao tác sau
- Yêu cầu mô-đun ["index.js", "server/server.js", "common/models/sample-model.js"] 1 trong các tệp nhị phân NodeJS tùy chỉnh xử lý mã hóa
- Tìm nạp danh sách các tệp để mã hóa từ tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 là một mảng các đường dẫn tệp w. r. t thư mục hiện tại
- Kiểm tra xem danh sách tệp trong ["index.js", "server/server.js", "common/models/sample-model.js"] 2 có được mã hóa hay không và nếu không được mã hóa, hãy sử dụng hàm ["index.js", "server/server.js", "common/models/sample-model.js"] 4 để mã hóa tệp
- Xóa tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 để tệp không bị gửi nhầm
Ghi chú. Đề xuất đặt ["index.js", "server/server.js", "common/models/sample-model.js"] 6, ["index.js", "server/server.js", "common/models/sample-model.js"] 2 và ["index.js", "server/server.js", "common/models/sample-model.js"] 1 trong tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 so với cùng thư mục nơi mà ["index.js", "server/server.js", "common/models/sample-model.js"] 6 sẽ được thực thi
Sau đây là một tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 mẫu
["index.js", "server/server.js", "common/models/sample-model.js"]
Ghi chú. Để sử dụng mã hóa, bạn cần sử dụng trình thực thi và hình ảnh cơ sở thích hợp trong Dockerfile có các tệp nhị phân nodejs tùy chỉnh hỗ trợ các hoạt động mã hóa và giải mã. Vui lòng tham khảo bảng dưới đây để biết các hình ảnh phù hợp
Hình ảnh với các nhị phân NodeJS tùy chỉnh
Phiên bản NodeJSBase ImageExecutor ImageSource CodeBase Image SourceExecutor Image Source8. 11. 3 cơ quan đăng ký. đám mây. cục bộ/kpraveen-evalpinenode. đăng ký mới nhất. đám mây. cục bộ/oecloudlocal-oecloudexecutor. oenode8alpine36LinkLinkLink10. 16. 0đăng ký. đám mây. cục bộ/nút. 10. 16. 0-alpine-encryptedregistry. đám mây. cục bộ/oecloud-executor. 10. 16. 0-mã hóaLinkLinkLink12. 13. 0đăng ký. đám mây. cục bộ/nút. 12. 13. 0-alpine-encryptedregistry. đám mây. cục bộ/oecloud-executor. 12. 13. 0-mã hóaLinkLinkLink14. 17. 4evdtr. quảng cáo. infosys. com/oecloud/nút. v14. x-mã hóa-ubi8. 4-minimal_openssl_latesevdtr. quảng cáo. infosys. com/oecloud/oecloud-executor. v14. x-encrypted-ubi8LinkLinkLinkCách sử dụng trong CI
Những thay đổi sau đây sẽ được thực hiện để mã hóa mã
- Tạo tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 với mảng tên tệp
- Dự án nhân bản ["index.js", "server/server.js", "common/models/sample-model.js"] 6
- Chạy lệnh ["index.js", "server/server.js", "common/models/sample-model.js"] 7 mã hóa các tệp được liệt kê trong ["index.js", "server/server.js", "common/models/sample-model.js"] 2 và viết lại nội dung tệp thành mã được mã hóa và xóa tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2
- Xóa thư mục ["index.js", "server/server.js", "common/models/sample-model.js"] 6 đã được sao chép
- Xây dựng và/hoặc triển khai dự án của bạn
Sau đây là một tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 mẫu
["index.js", "server/server.js", "common/models/sample-model.js"] or ["index.js", "common/**/*.js", "server/**", "node_modules/oe-cloud/common/**"]
Ghi chú. Tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 6 sẽ chỉ tìm kiếm các tệp kết thúc bằng. js. Vì thư mục node_modules không bị bỏ qua vì mã hóa cũng có thể được yêu cầu đối với các tệp bên trong thư mục node_modules, vui lòng đảm bảo rằng các mẫu được cung cấp không thực hiện mã hóa trên tất cả các tệp
Sau đây là các lệnh được thêm vào trong công việc xây dựng CI
git clone //evgit/oecloud.io/build-tools.git node build-tools/encrypt.js rm -rf build-tools ## Perform docker build after this
Ghi chú. Tệp ["index.js", "server/server.js", "common/models/sample-model.js"] 2 có mặt trong thư mục nơi lệnh ["index.js", "server/server.js", "common/models/sample-model.js"] or ["index.js", "common/**/*.js", "server/**", "node_modules/oe-cloud/common/**"] 4 đang được thực thi
Dự án tham khảo
Dự án mẫu oeCloud ["index.js", "server/server.js", "common/models/sample-model.js"] or ["index.js", "common/**/*.js", "server/**", "node_modules/oe-cloud/common/**"] 5 đã được phân nhánh để tạo nhánh ["index.js", "server/server.js", "common/models/sample-model.js"] or ["index.js", "common/**/*.js", "server/**", "node_modules/oe-cloud/common/**"] 6 có triển khai mẫu để mã hóa