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 là 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,
Nguồn
2012-01-01 08:58:49
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) –
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? –