2009-02-08 26 views
5

Triển khai môi trường 'sandbox' trong Python được sử dụng để thực hiện với mô-đun rexec (http://docs.python.org/library/rexec.html). Thật không may, nó đã không được chấp nhận/loại bỏ do một số lỗ hổng bảo mật. Có cách nào khác không?Có cách nào thay thế rexec cho hộp cát Python không?

Mục tiêu của tôi là có mã Python thực thi các tập lệnh Python bán đáng tin cậy. Trong một thế giới hoàn hảo, các cuộc gọi đến bất kỳ chức năng nào bên ngoài một bộ được xác định trước sẽ làm tăng các ngoại lệ. Từ những gì tôi đã đọc về sự phản đối của rexec, điều này có thể không thực hiện được. Vì vậy, tôi sẽ giải quyết cho nhiều như tôi có thể nhận được. Tôi có thể sinh ra một quá trình riêng biệt để chạy các kịch bản lệnh, giúp ích rất nhiều. Nhưng họ vẫn có thể lạm dụng I/O hoặc tài nguyên bộ xử lý/bộ nhớ.

+0

Đối với những gì có vẻ, nó có vẻ miễn là bạn ulimit pid tạo, rexec là an toàn. – user2284570

Trả lời

4

Bạn có thể muốn cung cấp __import__ của riêng mình để ngăn không cho bất kỳ mô-đun nào bạn cho là "lạm dụng I/O hoặc tài nguyên bộ xử lý/bộ nhớ".

Bạn có thể muốn bắt đầu với pypy và tạo trình thông dịch của riêng bạn với các giới hạn và hạn chế về sử dụng tài nguyên.

+0

Cung cấp __import__ của riêng bạn là một ý tưởng tuyệt vời và tốt hơn nhiều so với bất kỳ giải pháp nào khác đã từng thực hiện cho hộp cát! – kylebrooks

+0

@ kylebrooks: "tốt hơn nhiều so với bất kỳ giải pháp nào khác" là một chuỗi bit. Nó cho phép bạn mô-đun danh sách trắng (và danh sách đen), nhưng nó không ngăn chặn hoặc thậm chí phát hiện một quá trình cố gắng "lạm dụng I/O hoặc tài nguyên bộ xử lý/bộ nhớ." –

+0

Bạn chỉ có thể danh sách trắng hoặc danh sách đen các mô-đun đó nếu bạn không có quyền truy cập vào các đối tượng chứa tham chiếu đến chúng (hoặc phần mở rộng c bỏ qua hoàn toàn các mô-đun cấp python). Việc thiếu đóng gói trong python dường như là thách thức bảo mật lớn nhất. – DylanYoung

2

trong CPython "sandboxing" vì những lý do an ninh là một: "không làm điều đó ở trẻ em công ty của bạn" -thing.

thử:

  • Jython với java "sandboxing"
  • PyPy -> xem trả lời S. Lott
  • lẽ IronPython có một giải pháp?

thấy Warning:

Warning

Trong Python 2.3 các mô-đun đã bị vô hiệu hóa do lỗ hổng bảo mật dễ dàng fixable biết và không khác nhau. Các mô-đun vẫn được ghi lại ở đây để giúp đọc mã cũ sử dụng các mô đun rexec và Bastion.

+0

Dường như tất cả các lỗ hổng bảo mật này đều yêu cầu tạo luồng hoặc quy trình. Vì vậy, rexec là an toàn nếu tạo pid là ulimit. – user2284570

0

Đặt cược tốt nhất cho bảo mật của bạn trong cPython đang sử dụng các cơ chế hộp cát cấp hệ điều hành và chạy mã không tin cậy trong một quá trình riêng biệt bị ràng buộc bởi hệ điều hành.

Điều này tương đương với việc sử dụng hộp cát 'jython với java "", theo the answer above, nhưng có thể khó cấu hình hơn một chút.

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