All,SecurityManager cho một dịch vụ đám mây "sandbox"
Tôi đang làm việc trên thiết kế của một dịch vụ dựa trên đám mây sẽ cung cấp các tùy chọn để thực hiện một số mã "cắm" đệ trình bởi khách hàng. Để thực hiện công việc này, điều quan trọng là các plugin không thể đe dọa tính toàn vẹn của hệ thống hoặc có khả năng truy cập dữ liệu của các máy khách khác.
Lý tưởng nhất là tôi muốn khách hàng có thể gửi tệp jar đơn giản (có chứa một lớp phù hợp với một số giao diện được xác định trước) mà sau đó sẽ được chạy trong một hộp cát.
Mã khách hàng nên được phép:
- Đi càng nhiều thời gian CPU như nó cần trên một sợi đơn
- Thực hiện bất kỳ tính toán sử dụng các lớp java tiêu chuẩn (ví dụ java.lang.Math, java. util.Random vv)
- Gọi bất kỳ thư viện đóng gói trong lọ (nhưng mà phải chịu sự hạn chế tương tự)
nhưng tôi đặc biệt sẽ cần phải không cho phép như sau:
- đẻ trứng chủ đề mới (do đó tài nguyên máy chủ có thể được quản lý một cách công bằng!)
- Bất kỳ quyền truy cập vào hệ thống tập tin/IO/mạng
- Bất kỳ quyền truy cập vào mã nguồn gốc
- Bất kỳ quyền truy cập vào dữ liệu trong JVM khác được chuyển đến/được tạo bởi mã máy khách
- Bất kỳ quyền truy cập nào vào phản ánh trên các lớp khác với các lớp trong hộp cát .jar
- Bất kỳ khả năng gọi phương thức nào trên các đối tượng bên ngoài hộp cát, trừ thư viện chuẩn Java
Có thể thực hiện điều này bằng thiết lập ClassLoader/SecurityManager tùy chỉnh không? Hoặc tôi sẽ cần phải bắt đầu tìm kiếm một giải pháp phức tạp hơn (ví dụ: khởi chạy nhiều JVM?)
@M bất kỳ tiến trình nào để báo cáo? –