2009-11-08 37 views
6

Có một intepreter Python an toàn không?Bảo mật Python intepreter?

Hãy tưởng tượng một máy ảo Python bạn có thể chạy trên máy của mình, điều đó hạn chế các hoạt động. Không thể mở tệp, không có cuộc gọi hệ thống, v.v. Nó chỉ biến đổi stdin thành giá trị chuẩn, có thể với xử lý văn bản + toán học, v.v.

Máy ảo Python bảo mật có tồn tại không?

Trả lời

2

Bạn có thể chạy Jython trên JVM với một SecurityManager cho phép bạn chỉ định các hoạt động được phép/không được phép.

7

Tôi biết không có "thông dịch viên an toàn" được phân phối công khai (rõ ràng Google có một phiên bản được sử dụng trong App Engine, mặc dù có một số hạn chế khác nhau như bạn mong muốn, ví dụ: có thể mở một cách chỉ đọc). Tuy nhiên, có một số tuyên bố cho nó, ví dụ: here, mặc dù tôi không thể xác minh chúng. 's Python in a Sandbox có lẽ là một trong những giá trị đầu tiên cố gắng, cho chất lượng cao và danh tiếng của nhóm phát triển pypy' (họ đang rất khó để làm cho tuyên bố unsubstantiated).

+0

Xin lỗi Alex, chúng tôi vừa có điều kiện chạy đua. Tôi đã chỉnh sửa câu hỏi để làm cho nó sử dụng thuật ngữ Python (bị hạn chế) cho những gì OP yêu cầu (an toàn). – ddaa

+0

@ddaa, tôi không nghĩ rằng OP muốn cụ thể rexec - chỉ là một "máy ảo" an toàn "Sandboxed" Python ("sandbox" là thuật ngữ thường được sử dụng trong các ngữ cảnh như vậy). –

1

Bạn có thể chạy IronPython bên trong miền ứng dụng .NET có đặc quyền bị hạn chế.

Điều này chắc chắn sẽ hoạt động trong Windows và có thể/có thể là trong Mono (tôi thực sự không thể nói).

Bạn sẽ cần viết một chương trình nhỏ nhúng trình thông dịch IronPython và chuyển đoạn mã cho nó.

Ví dụ đầu tiên trong chương về nhúng trong sách Iron Python in Action hiển thị để viết trình khởi chạy như vậy.

Tôi không nhớ nếu nó bao gồm tên miền ứng dụng, nhưng thông tin đó phải ở trên Web ở đâu đó.

-1

Tôi đã chơi đùa với điều này gần đây. Yêu cầu của tôi bao gồm Python 3.x, ngay lập tức có các giải pháp như Jython và IronPython. Tôi vẫn do dự khi đi theo con đường đó, vì tôi chưa bao giờ tin tưởng các máy ảo ngôn ngữ kiểu người dùng.

Đó là trường hợp, vì mục đích của tôi, giải pháp tốt nhất cho đến nay là đưa nó ra khỏi bàn tay của thông dịch viên hoàn toàn và chạy trong một thùng chứa bị khóa chặt (OpenVZ hoặc tương tự). Tuy nhiên, điều này là lấy một cái búa cho vấn đề (mặc dù không phải là búa tạ của ảo hóa đầy đủ), và có thể không khả thi nếu bạn phải chạy một số lượng rất lớn các phiên dịch riêng biệt.

Một điều ngược lại, là vì nó không dựa vào sự bảo mật của bất kỳ trình thông dịch cụ thể nào, bạn có thể sử dụng bất kỳ ngôn ngữ tùy ý nào bạn muốn trong môi trường - bạn không phải tự buộc mình vào Python hoặc tập hợp các ngôn ngữ/triển khai có sẵn cho JVM hoặc .NET/Mono.

1

Tôi là sinh viên năm thứ nhất và trong năm đầu tiên, chúng tôi được dạy python. Chúng tôi đã có những thứ này được gọi là "CodeLabs" mà phải được gửi định kỳ. Nó hoạt động bằng cách đặt câu hỏi và yêu cầu học sinh nhập câu trả lời của họ vào một hộp văn bản và chạy mã đó trên một số trường hợp kiểm tra và kiểm tra giá trị trả lại của họ

Một ngày, trang web codelabs (turingscraft.com) không thể truy cập được vì ai đó quyết định chạy một vòng lặp vô tận và gọi os.fork() bên trong nó.

Đây rõ ràng là sự cố đối với quản trị viên của turingscraft.com.Tuy nhiên, sau đó họ tìm thấy một cách để hạn chế quyền truy cập vào các lệnh như vậy cho sinh viên.

Nếu tôi là bạn, tôi sẽ tra cứu thông tin về trang web của họ. Có thể họ đã đăng một số thông tin về vấn đề này và cách khắc phục nó

2

Bạn không cần một Python sửa đổi để hạn chế thực thi theo một nghĩa nào đó. Chỉ cần nhìn vào codepad.org, một ghi đè mà bạn có thể dán mã (bằng Python và các ngôn ngữ khác) và chạy nó và kết quả được hiển thị. Mã chạy trong một môi trường rất hạn chế, nhưng đó chỉ là cấu hình hệ điều hành. (Example paste)

0

Bạn luôn có thể truy cập mã nguồn và tạo hương vị riêng cho Python. Nếu đủ người cần nó, nó sẽ không có thời gian trước khi nó hoạt động.

+0

+1, một phần vì không có lý do chính đáng để làm giảm điều này, một phần vì đó là chính xác những gì Google đã làm trong việc xây dựng Google App Engine. –

-1

Tính bảo mật không phải là một công việc cho hệ điều hành?

Ý tôi là, tạo người dùng có quyền truy cập hạn chế vào các tệp và như vậy. Sau đó, để cho vm được chạy chỉ với các quyền này.

Hoặc có thể tôi đang nói vô nghĩa. Tôi không phải là chuyên gia bảo mật hay chuyên gia bảo mật, nhưng tôi có xu hướng làm những việc với các công cụ được tạo ra cho nó.

+0

* nix không được thực hiện để bảo mật chống lại mã đang chạy với tư cách người dùng giống như bạn, bạn có thể thử làm điều này, nhưng nó sẽ là địa ngục. Điều tốt nhất bạn có thể làm là chạy toàn bộ ứng dụng với tư cách là một người dùng khác, nhưng sau đó nó không thể sử dụng cùng một màn hình X11 như bạn .. –