Mã hóa mã nodejs

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

Mã hóa mã 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

Mã hóa mã nodejs

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-ubi8LinkLinkLink

Cá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 http://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

Làm cách nào để mã hóa mã trong NodeJS?

Cách mã hóa văn bản. tạo một tệp có tên encdec. js và dán. yêu cầu ('crypto')const mã hóa = (plainText, mật khẩu) Sau đó chạy. mã hóa, giải mã, mã hóa và kiểm tra. "Xin chào thế giới," "bí mật1234" Sau đó chạy chức năng giải mã. đầu ra "được giải mã" và "được mã hóa". Chào thế giới

Có thể mã hóa mã javascript không?

Bạn có thể làm xáo trộn nó, nhưng không có cách nào bảo vệ nó hoàn toàn .

Làm cách nào để mã hóa và giải mã giá trị trong NodeJS?

Quy trình giải mã bằng Node. mô-đun tiền điện tử js . Fetch the IV and encrypted text from the data pass as an argument. Sử dụng phương thức createDeciphervie và chuyển thuật toán, khóa và IV sau đó đặt hàm thành bộ giải mã biến. Sử dụng biến giải mã để cập nhật văn bản được giải mã.