2012-01-01 18 views
6

Được rồi, tôi có một ứng dụng mà tôi muốn thêm hỗ trợ cho người khác để viết các mô-đun mà ứng dụng sẽ tải.C# Tải Sandboxed hội

Mô-đun sẽ là lớp mở rộng lớp Mô-đun của tôi, được viết bằng .Net. Tôi cần phải biết làm thế nào để tải các DLL trong một môi trường sandboxed, chỉ cho phép họ đọc/ghi trong các thư mục nhất định.

Điều này có khả thi không?

+1

câu hỏi tương tự: [Loading Assemblies từ một ứng dụng Net trong một 'Sandbox Môi trường'] (http://stackoverflow.com/questions/510071/loading-assemblies-from-a-net -ứng dụng-trong-một-sandbox-môi trường), [Trong .NET 4.0, làm thế nào để tôi 'sandbox' một lắp ráp trong bộ nhớ và thực hiện một phương pháp?] (http://stackoverflow.com/questions/5997995/in- net-4-0-how-do-i-sandbox-an-trong-bộ nhớ-lắp ráp-và-thi-một-phương pháp) –

+0

Câu hỏi của bạn tham chiếu đến thẻ 'scripting'. Bạn có kế hoạch tự động biên dịch mã .NET của mình không hoặc thẻ này áp dụng cho trường hợp của bạn như thế nào? –

Trả lời

9

Có, điều này là có thể. Sử dụng Bảo mật Truy cập Mã và .NET Sandbox. Tôi khuyên bạn hãy xem thư viện CSScript (nguồn mở). Đây là một thư viện cung cấp C# scripting và trên biên dịch bay thành các assembly động. Tôi đã sử dụng điều này trong một dự án để cho phép người dùng cuối viết các kịch bản lệnh C# và thực thi chúng cho phép tương tác với các lớp trong hệ thống của tôi. Dự án yêu cầu họ không có quyền truy cập vào File IO hoặc MessageBox (UI) khi kịch bản người dùng được thực hiện trên máy chủ. CSSCript đã sử dụng các phần tử của khung công tác .NET để hạn chế những gì mà assembly có quyền truy cập và bạn sẽ nhận được một ngoại lệ nếu có bất kỳ kiểu bị cấm nào được gọi.

Vì vậy, hãy xem xét điều đó. Tôi sẽ chỉnh sửa câu trả lời của mình sau khi tôi tìm hiểu thêm chi tiết về cách có thể khả năng của nó, chỉ để cho bạn biết rằng có thể!


Ok tìm thấy nó. Đây là một cuộc thảo luận tôi đã có với tác giả của CSScript một vài năm trước đây:

nhớ:

Tôi đang phát triển một ứng dụng và muốn để lộ khả năng cho người dùng để kịch bản hành động nhất định thông qua giao diện người dùng. CSScript trông rất tốt cho việc này. Tuy nhiên tôi cũng muốn cho phép người dùng thực hiện điều này và thực thi các tập lệnh của họ trên máy chủ web. Bây giờ đây là một cơn ác mộng bảo mật khi người dùng có thể viết "Directory.Delete (@" C: \ ", true)" và xóa ổ cứng. Vì vậy, nó sẽ có thể hạn chế các hội đồng, không gian tên hoặc thậm chí các lớp học mà người dùng có thể truy cập từ kịch bản của họ, để sắp xếp chạy CSScript trong một sandbox an toàn?

Oleg:

Các giải pháp hấp dẫn ngay lập tức là sử dụng .NET Sandbox. Nó được thiết kế chính xác cho loại kịch bản này. Hộp cát tiêu chuẩn CLR có sẵn cho ứng dụng máy chủ đang chạy tập lệnh với CS-Script. Ý tưởng là bạn khởi tạo CAS trước khi tải kịch bản đáng ngờ và phần còn lại là trách nhiệm CLR. Và nếu bạn cần cấu hình thư mục/tập tin cho phép bạn làm điều đó với các công cụ CAS. Cách này kịch bản là một "giao thông" cho các thói quen được cung cấp bởi người dùng của bạn. Và CS-Script là một cơ chế thuận tiện để thực hiện việc vận chuyển như vậy nhưng các mối quan tâm bảo mật thực tế được .NET Sendoxing giải quyết, có bộ chức năng toàn diện để bao quát tất cả các kịch bản bảo mật có thể có. Với tải xuống CS-script, bạn có thể tìm mẫu Sendboxing (\ Samples \ Sandboxing) để minh họa cách ngăn chặn tập lệnh từ các hoạt động I/O của tệp (ví dụ: tạo tệp).

Vì vậy, từ điều này, tôi tin rằng bạn cần xem .NET Sandbox và tải các cụm vào đó. Tôi nhận ra ví dụ này là cụ thể cho C# Scripting nhưng tôi tin rằng nó được áp dụng cho kịch bản của bạn như các ví dụ CSScript ở trên sẽ cho bạn thấy một cách để đạt được sandboxing và bảo mật.

Một số ví dụ cụ thể về cách để tải lắp ráp thành một sandbox có thể được tìm thấy ở đây:

Trong khi chúng tôi đang thảo luận mô-đun tải, có bạn đã nghe nói về Microsoft Prism? Điều này cung cấp một khuôn khổ tốt cho tải mô-đun và phụ thuộc tiêm (thông qua Unity hoặc MEF) mà có thể rất hữu ích khi phát triển một kiến ​​trúc plugin.

Trân trọng,

+0

Cảm ơn thông tin, tôi sẽ kiểm tra những ngày mai (3h ở đây!) Tôi đã cố gắng để có được câu trả lời từ [Here] (http://stackoverflow.com/questions/5997995/in-net-4- 0-how-do-i-sandbox-an-trong-bộ nhớ-lắp ráp-và-thực hiện-a-phương pháp) làm việc nhưng khi tôi cố gắng tải module của tôi nó nói nó không thể tìm thấy nó hoặc một nếu đó là phụ thuộc. Hy vọng rằng ngày mai tôi có thể tìm ra điều gì đó với tất cả các liên kết mà các bạn đã gửi cho tôi. – BoJaN

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