2014-04-06 18 views
5

Tôi muốn cho phép người dùng gửi mã nguồn Java/Scala từ trình duyệt của khách hàng và biên dịch/thực thi nó trên máy chủ. Tuy nhiên, đồng thời, tôi muốn hạn chế người dùng chạy mã độc hại tiềm ẩn trên máy chủ.Scala/Java Sandbox cho mã không đáng tin cậy

Ví dụ: tôi muốn ngăn truy cập hệ thống tệp cũng như truy cập mạng vào/ra đối với mã nguồn đã gửi. Tôi nên hạn chế những gì khác?

Tôi nên cho phép các thư viện Java/Scala nào rõ ràng cho khách hàng? Ví dụ, ở đây là các lý do không được phép của API/thư viện:

java.lang.System 
java.lang.Runtime 
java.io.* 
java.nio.* 
scala.io.* 
java.net 

Làm thế nào để đúng cách sandbox không tin cậy mã Java/Scala?

+0

Tôi có thể sai nhưng trước tiên, bạn nên triển khai "danh sách trắng" và API không cho phép thứ hai sẽ không đủ. Nhưng một lần nữa, về chiều hướng này, tôi không chắc chắn về toàn bộ phạm vi. – Lucio

+3

Tôi sẽ sử dụng * cách tiếp cận môi trường bị cô lập *. Tức là, không giới hạn mã hoặc gói sẵn có, nhưng giới hạn môi trường - tức là không có quyền truy cập mạng (hoặc giới hạn/ảo hóa), không truy cập mạng (hoặc giới hạn/ảo hóa). Điều này không trả lời câu hỏi vì nó không nói * làm thế nào * để tạo ra một môi trường hạn chế như vậy, nhưng tôi tin rằng đó là một cách tiếp cận lành mạnh cho một dịch vụ "codepad/execution" trực tuyến. – user2864740

+0

@ user2864740 + cấm những thứ như 'System.exit()' –

Trả lời

3

Thời gian chạy JVM có thể bị hạn chế bằng cách cung cấp policy file. Java không may là không dễ dàng, vì vậy bạn sẽ khôn ngoan để hạn chế tài khoản đang chạy JVM ở cấp hệ điều hành.

Nếu bạn cho phép người dùng cuối để biên dịch mã scala trên máy chủ của bạn thì trình biên dịch có thể thực thi mã macro là một bề mặt tấn công bổ sung. Scalac có lẽ không được thiết kế để bảo vệ chống lại các macro độc hại. Scalac chạy trong một JVM và có thể được sandbox tương tự.

This question rất gần với bạn.

+0

Xin chào @Mark Lister, Bạn có thể vui lòng cung cấp thêm một số thông tin về việc hạn chế các đặc quyền JVM ở cấp hệ điều hành không? – NehaM

Các vấn đề liên quan